【发布时间】:2011-08-25 21:18:40
【问题描述】:
我有一本这样的字典:
A = {'a':10, 'b':843, 'c': 39,.....}
我想获取这个字典的 5 个最大值并用它存储一个新的字典。为了获得我所做的最大值:
max(A.iteritems(), key=operator.itemgetter(1))[0:]
也许这是一件容易的事,但我坚持了很长时间。请帮忙!!!
【问题讨论】:
标签: python dictionary max
我有一本这样的字典:
A = {'a':10, 'b':843, 'c': 39,.....}
我想获取这个字典的 5 个最大值并用它存储一个新的字典。为了获得我所做的最大值:
max(A.iteritems(), key=operator.itemgetter(1))[0:]
也许这是一件容易的事,但我坚持了很长时间。请帮忙!!!
【问题讨论】:
标签: python dictionary max
无需使用 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。
【讨论】:
你很接近。您可以使用sorted [docs] 对列表进行排序并获取前五个元素:
newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
【讨论】:
sorted 技术足以满足 OP 的目的。
sorted 操作可能会以我建议的那种手写的专用算法可能无法实现的方式进行优化。它已经过非常彻底的测试。
你可以在这里使用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}
【讨论】:
对于 Python 3
import operator
dict(sorted(A.items(), key=operator.itemgetter(1), reverse=True)[:5])
【讨论】:
result = sorted(A.items(), key=lambda x: x[1], reverse=True)[:5]
试试这个:
dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
【讨论】: