在Python2.7中,我希望按计数的降序遍历collections.Counter
实例。
>>> import collections
>>> c = collections.Counter()
>>> c['a'] = 1
>>> c['b'] = 999
>>> c
Counter({'b': 999, 'a': 1})
>>> for x in c:
print x
a
b
在上面的示例中,元素似乎是按照添加到计数器实例中的顺序进行迭代的。
我想从最高到最低遍历列表。我看到计数器的字符串表示可以做到这一点,只是想知道是否有推荐的方法来实现这一点。
发布于 2012-06-15 00:06:17
您可以遍历c.most_common()
以获得所需顺序的项。另请参阅documentation of Counter.most_common()
。
示例:
>>> c = collections.Counter(a=1, b=999)
>>> c.most_common()
[('b', 999), ('a', 1)]
发布于 2017-06-28 11:28:38
以下是迭代Python集合中的计数器的示例:
>>>def counterIterator():
... import collections
... counter = collections.Counter()
... counter.update(('u1','u1'))
... counter.update(('u2','u2'))
... counter.update(('u2','u1'))
... for ele in counter:
... print(ele,counter[ele])
>>>counterIterator()
u1 3
u2 3
发布于 2017-05-03 00:48:15
你的问题已经解决了,只是返回降序,但这里是如何做的一般。如果其他人从谷歌来到这里,这里是我必须解决的方法。基本上,上面的内容返回了collections.Counter()中的字典的键。要获得值,您只需将键传递回字典,如下所示:
for x in c:
key = x
value = c[key]
我有一个更具体的问题,我有字数统计,并希望过滤掉低频的。这里的技巧是制作collections.Counter()的副本,否则当您尝试从字典中删除它们时,您将得到"RuntimeError:字典在迭代期间改变大小“。
for word in words.copy():
# remove small instance words
if words[word] <= 3:
del words[word]
https://stackoverflow.com/questions/11037005
复制相似问题