python中heapq對dict進行排序


問題:

想從以下形式的dict中取value最大的2個key-value的key

dict_num_num = {0: 0.07374631268436578, 1: 0.16307692307692306, 2: 0.11455108359133127, 3: 0.06748466257668712, 4: 0.08383233532934131, 5: 0.11081794195250659, 6: 0.04261463063367381, 7: 0.0, 8: 0.2742382271468144, 9: 0.06963788300835655, 10: 0.0, 11: 0.0, 12: 0.0, 13: 0.0}

 

 起初考慮使用兩個標記、遍歷一遍dict的方法,但考慮到后續可能會需要3個或者以上的最大鍵值對(n個),便想到使用堆的方式進行獲取。

先想到的是堆中只維護n個最大的鍵值對,遇到比堆中最小的鍵值對的value大的key-value,便replace。

使用過程中意外的發現heapq有 nlargest(n, iterable, key=None)方法。

max_n = heapq.nlargest(2, result_x.items(), key=lambda x: x[1])

 便參考python:heapq模塊對嵌套字典或二維列表取topN進行改進,值得注意的是,其中的iteritems()方法是2.7版本中的,3.7中對應的是items()方法

其中學到兩點:

1.lambda表達式。

2.dict.items()方法將字典中所有key:value對轉變成(key,value)列表。使用上述labmda表達式可是heapq排序時根據value值進行排序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM