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

Stu*_*Cat 1 python dictionary

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

Mar*_*ers 7

是的,通过使用heapq.nlargest()功能:

from heapq import nlargest

five_largest = nlargest(5, yourdict, key=yourdict.get)
Run Code Online (Sandbox Code Playgroud)

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

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

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