是否有更简洁的方法来查找字典中最高的5个值?

时间:2014-02-25 20:12:17

标签: python dictionary

现在,我循环遍历整个字典五次并在每次迭代后保持最高值并删除条目。但这似乎是一种非常讨厌的方式来做我想做的事情。基本上我想获得我的字典的前5个最大值,并返回键,有没有更好的方法来做到这一点而不是迭代它五次?

2 个答案:

答案 0 :(得分:7)

是的,使用heapq.nlargest() function

from heapq import nlargest

five_largest = nlargest(5, yourdict, key=yourdict.get)

这比重复循环排序更有效。

heapq算法将对你的密钥进行直接循环,只保留其中5个保持不变量的堆,然后在循环完成时返回那5个元素的排序顺序。循环是O(N),保持循环不变是O(logK)(其中K是堆大小),排序O(KlogK)。总复杂度:O(NlogK)

排序需要对完整字典进行排序,即O(NlogN)。这意味着N越大,heapq.nlargest()在性能上越胜。

答案 1 :(得分:1)

尝试此操作以获得前5个值:

sorted(mydict.values())[-5:]

并获得相应的密钥:

sorted(mydict, key=mydict.get)[-5:]