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值进行排序。
python中heapq对dict进行排序的更多相关文章
- python中heapq堆的讲解
		堆的定义: 堆是一种特殊的数据结构,它的通常的表示是它的根结点的值最大或者是最小. python中heapq的使用 列出一些常见的用法: heap = []#建立一个常见的堆 heappush(hea ... 
- python中的字典(dict),列表(list),元组(tuple)
		一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ... 
- python中list/tuple/dict/set的区别
		序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.Python有6个序列的内置类型,但最常见的是列表list和元组t ... 
- python中list和dict
		字典(Dictionary)是一种映射结构的数据类型,由无序的“键-值对”组成.字典的键必须是不可改变的类型,如:字符串,数字,tuple:值可以为任何python数据类型. 1.新建字典 1 2 3 ... 
- python中的list, dict, tuple以及collections模块的基本用法
		1.关于list的一些基本用法 # 创建没有初值的列表 list1=[] # 创建有初值的列表 list2=['this','is','a','list'] # 创建给定长度但初值不确定的列表 lis ... 
- Python中list,tuple,dict,set的区别和用法
		Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ... 
- python 中的 list dict 与 set 的关系
		转自: http://www.cnblogs.com/soaringEveryday/p/5044007.html list arraylist 实现(数组) List 通过内置的 append()方 ... 
- Python中list,tuple,dict,set的区别和用法(转)
		原文地址:http://www.cnblogs.com/soaringEveryday/p/5044007.html Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个 ... 
- python中json与dict之间转换
		Python之dict(或对象)与json之间的互相转化 在Python语言中,json数据与dict字典以及对象之间的转化,是必不可少的操作. 在Python中自带json库.通过import js ... 
随机推荐
- gradient  渐变
			看了大漠 写的关于 Gradient 的文章,我也想写点以便加深记忆. 首先gradient 分为linear-gradient (线性渐变) 和 radial-gradient(径向渐变),渐变是作 ... 
- 解决wpscan无法更新
			如果wpscan无法更新的话 一般的原因都是源或者更新地址无法访问 下面解决 updatedb #先更新一下系统的索引 locate wpscan #定位到wpscan的目录 大概就是updater. ... 
- Linux报错排解
			1.Loaded plugins: product-id, search-disabled-repos, subscription-manager This system is not registe ... 
- docker搭建单机ELK
			yum -y install epel-release yum -y install python-pip // 更新pip pip install --upgrade pip // 安装docker ... 
- What Linux bind mounts are really doing
			Lots of Unixes have some form of 'loopback' mounts, where you can mount a bit of an existing filesys ... 
- VM虚拟机?
			虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统. 虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全 ... 
- pip安装超时:Read timed out.
			环境:win10 和 pip 在pip install h5py(或者其他第三方依赖包时) 会出现Read timed out.的问题,即安装超时.如下图所示: 解决方法: 1. 在用户目录下,新建p ... 
- Linux教程  网络管理命令Netstat的使用
			Netstat(network statistics) 网络统计命令是一个命令行工具,用于监视网络出入的连接,路由表以接口统计等.Netstat 在所有的Unix或者Linux系统,Windows系统 ... 
- css超链接
			超链接的代码<a href="http://www.divcss5.com/" target="_blank" title="关于div css ... 
- JDK源码那些事儿之常用的ArrayList
			前面已经讲解集合中的HashMap并且也对其中使用的红黑树结构做了对应的说明,这次就来看下简单一些的另一个集合类,也是日常经常使用到的ArrayList,整体来说,算是比较好理解的集合了,一起来看下 ... 
