python中字典按键或键值排序的实现代码


Posted in Python onAugust 27, 2019

字典排序

在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Python中字典的排序分为按“键”排序和按“值”排序。

按“值”排序

按“值”排序就是根据字典的值进行排序,可以使用内置的sorted()函数。

sorted(iterable[, cmp[, key[, reverse]]])
  • iterable:是可迭代类型类型;
  • cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
  • key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
  • reverse:排序规则. reverse = True 或者 reverse = False,有默认值,默认为升序排列(False)。

返回值:是一个经过排序的可迭代类型,与iterable一样。一般来说,cmp和key可以使用lambda表达式。

如果对字典进行排序,常用的形式如下:

sorted(dict.items(), key=lambda e:e[1], reverse=True)

其中,e表示dict.items()中的一个元素,e[0]表示按键排序,e[1]则表示按值排序。reverse=False可以省略,默认为升序排列。

说明:字典的items()函数返回的是一个列表,列表的每个元素是一个键和值组成的元组。因此,sorted(dict.items(), key=lambda e:e[1], reverse=True)返回的值同样是由元组组成的列表。

例:

x=[4,6,2,1,7,9,4]
y=x[:]
y.sort()
print x
print y

输出结果如下:

[4, 6, 2, 1, 7, 9, 4]

[1, 2, 4, 4, 6, 7, 9]

说明:调用x[:]得到的是包含了x所有元素的分片,这是一种很有效率的复制整个列表的方法。通过y=x简单的将x复制给y是没有用的,因为这样做就让x和y都指向了同一个列表了。

按“键”排序

对字典进行按键排序也可以使用上面的sorted函数,只要改为sorted(dict.items(), key=lambda e:e[0], reverse=True)就可以了。不过除了这个方式之外,还有另外的方法:通过列表的排序来达到使字典有序的目的。

用到的知识:字典的keys()函数返回列表形式的键值,将该列表排序即可。列表的排序使用列表的sort()函数,详细内容参考列表排序。

总结:

方法1:最简单的方法,排列元素(key/value对),然后挑出值。字典的items方法,会返回一个元组的列表,其中每个元组都包含一对项目 ——键与对应的值。此时排序可以sort()方法。

def sortedDictValues1(adict):
items = adict.items()
items.sort()
return [value for key, value in items]

方法2:使用排列键(key)的方式,挑出值,速度比方法1快。字典对象的keys()方法返回字典中所有键值组成的列表,次序是随机的。需要排序时只要对返回的键值列表使用sort()方法。

def sortedDictValues1(adict):
keys = adict.keys()
keys.sort()
return [adict[key] for key in keys]

方法3:通过映射的方法去更有效的执行最后一步

def sortedDictValues1(adict):
keys = adict.keys()
keys.sort()
return map (adict.get,keys )

方法4:对字典按键排序,用元组列表的形式返回,同时使用lambda函数来进行;

sorted(iterable[, cmp[, key[, reverse]]]
cmp和key一般使用lambda

例:

>>> d={"ok":1,"no":2} #对字典按键排序,用元组列表的形式返回
>>> sorted(d.items(), key=lambda d:d[0])
[('no', 2), ('ok', 1)] #对字典按值排序,用元组列表的形式返回
>>> sorted(d.items(), key=lambda d:d[1])
[('ok', 1), ('no', 2)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
python 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
python中csv文件的若干读写方法小结
Jul 04 Python
pycharm远程linux开发和调试代码的方法
Jul 17 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
Python 移动光标位置的方法
Jan 20 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 Python
python celery分布式任务队列的使用详解
Jul 08 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 #Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 #Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 #Python
selenium+PhantomJS爬取豆瓣读书
Aug 26 #Python
python多任务之协程的使用详解
Aug 26 #Python
python数组循环处理方法
Aug 26 #Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
Aug 26 #Python
You might like
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
使用Huagepage和PGO来提升PHP7的执行性能
2015/11/30 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
vue实现底部菜单功能
2018/07/24 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
Python读写配置文件的方法
2015/06/03 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android