web-dev-qa-db-ja.com

python辞書の最大値5

このような辞書があります:

A = {'a':10, 'b':843, 'c': 39,.....}

この辞書の5つの最大値を取得し、これを使って新しい辞書を保存したいと思います。私がした最大値を取得するには:

max(A.iteritems(), key=operator.itemgetter(1))[0:]

おそらくそれは簡単な作業ですが、私は長い間それにこだわっています。助けてください!!!

52
Alejandro

あなたは近いです。ソートリストを使用するには、 sortedを使用します。 [ドキュメント]  そして、最初の5つの要素を取ります:

newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])

参照: Python Sorting HowTo

55
Felix Kling

Iteritemsとitemgetterを使用する必要はありません。 dict自体のgetメソッドは正常に機能します。

max(A, key=A.get)

ソートの場合も同様:

sorted(A, key=A.get, reverse=True)[:5]

最後に、dictサイズが制限されていない場合、ヒープの使用は最終的にフルソートよりも高速になります。

import heapq
heapq.nlargest(5, A, key=A.get)

詳細については、 heapq documentation をご覧ください。

95
A. Coady

ここでは collections.Counter を使用できます。

dict(Counter(A).most_common(5))

例:

>>> from collections import Counter
>>> A = {'a' : 1, 'b' : 3, 'c' : 2, 'd' : 4, 'e' : 0, 'f' :5}
>>> dict(Counter(A).most_common(5))
{'a': 1, 'c': 2, 'b': 3, 'd': 4, 'f': 5}
38
Akavall

これを試して:

dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
3
Gerrat

Python 3

import operator
dict(sorted(A.items(), key=operator.itemgetter(1), reverse=True)[:5])
1
Malinda