我有一个如下的字典:
A = {'a':10, 'b':843, 'c': 39,.....}
我想获取这个字典中的前5个最大值,并将其存储到一个新的字典中。为了获取最大值,我做了以下操作:
max(A.iteritems(), key=operator.itemgetter(1))[0:]
也许这是一个简单的任务,但我已经卡在它上面很长时间了。请帮帮我!!!
我有一个如下的字典:
A = {'a':10, 'b':843, 'c': 39,.....}
我想获取这个字典中的前5个最大值,并将其存储到一个新的字典中。为了获取最大值,我做了以下操作:
max(A.iteritems(), key=operator.itemgetter(1))[0:]
也许这是一个简单的任务,但我已经卡在它上面很长时间了。请帮帮我!!!
无需使用iteritems和itemgetter。字典自己的get方法就可以很好地工作。
max(A, key=A.get)
同样适用于排序:
sorted(A, key=A.get, reverse=True)[:5]
最后,如果字典大小是不受限制的,使用堆排序将比完全排序更快。
import heapq
heapq.nlargest(5, A, key=A.get)
如需了解更多信息,请查看heapq
文档。
你已经很接近了。你可以使用sorted
[docs]对列表进行排序,并选择前五个元素:
newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])
另请参阅:Python排序指南
sorted
操作很可能已经通过一些手写的专用算法进行了优化,而我建议的这个算法可能无法实现。而且它已经经过了非常彻底的测试。 - Keith Thompson你可以在这里使用 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]
,这句代码的意思是什么? - Alper Yilmaz试试这个:
dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:5])