0

これが私の辞書です:

d['any1'] = 15
d['any2'] = 27
d['any3'] = 84
d['any4'] = 12
d['any5'] = 7
....
d['any1243'] = 24

辞書で 1243 から 30 個の最大の数字を見つけるのに役立つ Python ツールはありますか?

ありがとう。

4

2 に答える 2

3

collections.Counter()objectを使用した方がよいでしょう。メソッドCounterで明示的にこのユースケースをサポートします。Counter.most_common()

n 個の最も一般的な要素のリストと、それらの数を最も一般的なものから最小のものまで返します。

from collections import Counter

counts = Counter(d)
for key, freq in counts.most_common(30):
    print key, freq

最初からではなく、実際にCounter()オブジェクトを使用する場所。オブジェクトはサブクラスであるため、キーごとの頻度を追跡する場合にドロップイン置換として使用できますが、多くの場合、アイテムのカウントがはるかに簡単になります.dCounterdict

通常の辞書に行き詰まっている場合は、heapqmodule、具体的にはheapq.nlargest()functionを使用して、この機能を自分で実装できます。

import heapq
from operator import itemgetter

thirty_largest = heapq.nlargest(30, d.iteritems(), key=itemgetter(1))

thirty_largest、30 個のキーと値のタプルのリストです。

>>> import heapq
>>> from operator import itemgetter
>>> import random
>>> d = {'any{}'.format(i): random.randrange(5000) for i in range(1243)}
>>> for key, value in heapq.nlargest(30, d.iteritems(), key=itemgetter(1)):
...     print '{:<7} {:>4}'.format(key, value)
... 
any1226 4997
any1150 4997
any1225 4993
any401  4992
any949  4988
any130  4978
any1069 4977
any96   4974
any955  4974
any229  4970
any1117 4966
any883  4964
any937  4961
any729  4958
any981  4958
any7    4952
any1045 4952
any600  4950
any134  4948
any16   4937
any312  4937
any1158 4937
any1238 4932
any315  4932
any875  4930
any339  4930
any295  4926
any878  4925
any343  4922
any681  4917
于 2013-09-09T10:09:57.830 に答える
1

その多くの値については、次のような数行で実行できます。

import operator
d = ...
s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
print s[:30]
于 2013-09-09T11:16:01.063 に答える