python字典中的5个最大值

Ale*_*dro 52 python dictionary max

我有一个这样的字典:

A = {'a':10, 'b':843, 'c': 39,.....}
Run Code Online (Sandbox Code Playgroud)

我想得到这个dict的5个最大值,并用这个存储一个新的dict.为了获得我做的最大值:

max(A.iteritems(), key=operator.itemgetter(1))[0:]
Run Code Online (Sandbox Code Playgroud)

也许这是一件容易的事,但我长期坚持下去.请帮忙!!!

A. *_*ady 97

无需使用iteritems和itemgetter.dict自己的get方法运行正常.

max(A, key=A.get)
Run Code Online (Sandbox Code Playgroud)

类似的排序:

sorted(A, key=A.get, reverse=True)[:5]
Run Code Online (Sandbox Code Playgroud)

最后,如果dict大小无限制,使用堆最终将比完整排序更快.

import heapq
heapq.nlargest(5, A, key=A.get)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看heapq文档.


Fel*_*ing 57

你很亲密 您可以使用[docs]对列表进行排序,并采用前五个元素:sorted

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

另请参阅:Python排序方法

  • 对于大型字典而言,这可能是低效的,但更有效的解决方案将变得更加复杂.(例如,你可以实现一个部分Quicksort,当较高分区有5个或更多元素时,它不会对两个分区进行排序.)很可能`sorted`技术足以满足OP的需要. (4认同)

Aka*_*all 41

你可以在这里使用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}
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一返回值和键的答案,谢谢您** (2认同)

小智 6

对于 Python 3

import operator
dict(sorted(A.items(), key=operator.itemgetter(1), reverse=True)[:5])
Run Code Online (Sandbox Code Playgroud)