1

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']

それを効率的に行うにはどうすればよいですか (このコードは、リクエストごとに 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']
4

1 に答える 1

5

大きなsでこれを実行したい場合はCounter、マッピングを反転する以外に選択肢はありません。

inv_c = defaultdict(list)
for k, v in c.iteritems():
    inv_c[v].append(k)

次にinv_c.iteritems()、あなたが望むものです。

于 2012-11-14T13:55:06.403 に答える