zoukankan      html  css  js  c++  java
  • 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值进行排序。

  • 相关阅读:
    java 通过Iterator输出Map
    java SortedSet接口swap方法
    java vector
    java Iterator双向迭代输出
    java 序列化和反序列化多个对象
    培训
    每天晚上

    又想起了

  • 原文地址:https://www.cnblogs.com/peanutk/p/10676370.html
Copyright © 2011-2022 走看看