問題:
想從以下形式的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值進行排序。