按计数迭代计数器中的项目

zen*_*poy 1 python counter

假设我有一个Counter对象:Counter({'test': 2, 'this': 1, 'is': 1})

我想以下列方式迭代这个对象:

c = Counter({'test': 2, 'this': 1, 'is': 1})

for i,s in my_counter_iterator(c):
    print i, ":", s

>> 1 : ['this', 'is']
>> 2 : ['test']
Run Code Online (Sandbox Code Playgroud)

如何有效地执行此操作(此代码应在Web服务器上针对每个请求运行...)?

编辑

我试过这个,但我觉得有更有效的方法.在那儿?

from itertools import groupby

for k,g in groupby(sorted(c.keys(), key=lambda x: c[x]),key=lambda x: c[x]):
    print k, list(g)


1 ['this', 'is']
2 ['test']
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 5

如果你想用大Counters 做这个,你真的别无选择,只能反转映射.

inv_c = defaultdict(list)
for k, v in c.iteritems():
    inv_c[v].append(k)
Run Code Online (Sandbox Code Playgroud)

inv_c.iteritems()就是你想要的.