これが私の辞書です:
d['any1'] = 15
d['any2'] = 27
d['any3'] = 84
d['any4'] = 12
d['any5'] = 7
....
d['any1243'] = 24
辞書で 1243 から 30 個の最大の数字を見つけるのに役立つ Python ツールはありますか?
ありがとう。
これが私の辞書です:
d['any1'] = 15
d['any2'] = 27
d['any3'] = 84
d['any4'] = 12
d['any5'] = 7
....
d['any1243'] = 24
辞書で 1243 から 30 個の最大の数字を見つけるのに役立つ Python ツールはありますか?
ありがとう。
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()
オブジェクトを使用する場所。オブジェクトはサブクラスであるため、キーごとの頻度を追跡する場合にドロップイン置換として使用できますが、多くの場合、アイテムのカウントがはるかに簡単になります.d
Counter
dict
通常の辞書に行き詰まっている場合は、heapq
module、具体的には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
その多くの値については、次のような数行で実行できます。
import operator
d = ...
s = sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True)
print s[:30]