按降序遍历collections.Counter()实例的Python方式?
在Python2.7中,我想以递减计数顺序迭代一个按降序遍历collections.Counter()实例的Python方式?,collections,iteration,python-2.7,python,Collections,Iteration,Python 2.7,Python,在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
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
在上面的示例中,元素似乎是按照添加到计数器实例的顺序进行迭代的
我想从最高到最低遍历这个列表。我看到计数器的字符串表示法就是这样做的,只是想知道是否有一种推荐的方法可以做到这一点。您可以在
c.most_common()
上迭代以获得所需顺序的项。另见
例如:
>>> c = collections.Counter(a=1, b=999)
>>> c.most_common()
[('b', 999), ('a', 1)]
只返回降序就解决了您的问题,但下面是一般的方法。如果有人从谷歌来这里,我就必须解决这个问题。基本上,上面的内容返回集合内字典的键。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]
用于word中的word.copy():
#删除小实例词
如果words[word]以下是在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