博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中heapq对dict进行排序
阅读量:6320 次
发布时间:2019-06-22

本文共 772 字,大约阅读时间需要 2 分钟。

问题:

想从以下形式的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])

 便参考进行改进,值得注意的是,其中的iteritems()方法是2.7版本中的,3.7中对应的是items()方法

其中学到两点:

1.lambda表达式。

2.dict.items()方法将字典中所有key:value对转变成(key,value)列表。使用上述labmda表达式可是heapq排序时根据value值进行排序。

 

转载于:https://www.cnblogs.com/peanutk/p/10676370.html

你可能感兴趣的文章
背包问题: HDU1114Piggy-Bank
查看>>
常用的服务器命令
查看>>
linux系统安装后优化
查看>>
RHCE认证培训+考试七天实录(二)
查看>>
网络安全系列之五十二 组策略中的软件限制策略
查看>>
Google 镜像站搜集
查看>>
一个关于思科路由器ping的有趣现象
查看>>
《ActionScript3.0 游戏设计基础(第二版)》随书代码和附赠章节(共4章)
查看>>
GoDaddy万用https ssl证书如何通过DNS审核
查看>>
安卓屏幕分辨率
查看>>
对象深拷贝
查看>>
Debian 6 7 8 utc时间设置
查看>>
http代理
查看>>
使用Windows Live Writer发布日志
查看>>
Spring Boot下的Redis缓存实战
查看>>
时间的转换
查看>>
CentOS6.2 KVM 虚拟机命令行安装配置
查看>>
【查询】—Entity Framework实例详解
查看>>
linux 下取进程占用 cpu/内存 最高的前10个进程
查看>>
安全事件日志中的登录事件
查看>>