现在,我循环遍历整个字典五次并在每次迭代后保持最高值并删除条目.但这似乎是一种非常讨厌的方式来做我想做的事情.基本上我想获得我的字典的前5个最大值,并返回密钥,有没有更好的方法来做到这一点,而不是迭代它五次?
是的,通过使用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(),表现越胜.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |