按降序遍历collections.Counter()实例的Python方式?

按降序遍历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

在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
在上面的示例中,元素似乎是按照添加到计数器实例的顺序进行迭代的


我想从最高到最低遍历这个列表。我看到计数器的字符串表示法就是这样做的,只是想知道是否有一种推荐的方法可以做到这一点。

您可以在
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