簡體   English   中英

有沒有一種更干凈的方法來查找字典中的前5個值?

[英]Is there a cleaner way to find the highest 5 values in a dictionary?

現在,我要遍歷整個字典五次,並在每次迭代后保持最高值並刪除條目。 但這似乎是一種非常討厭的方式來做我想做的事情。 本質上,我想獲得字典的前5個最大價值,並返回鍵,有沒有比迭代5次更好的方法呢?

是的,通過使用heapq.nlargest()函數

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()的性能heapq.nlargest()

嘗試此操作以獲取前5個值:

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

並獲取相應的密鑰:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM