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 相关文章推荐
一个计算身份证号码校验位的Python小程序
Aug 15 Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 Python
python 基础教程之Map使用方法
Jan 17 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 Python
解决sublime+python3无法输出中文的问题
Dec 12 Python
python实现AES加密和解密
Mar 27 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
Python自动创建Excel并获取内容
Sep 16 Python
Prometheus开发中间件Exporter过程详解
Nov 30 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中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
vue-router之nuxt动态路由设置的两种方法小结
2018/09/26 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
python中黄金分割法实现方法
2015/05/06 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
Pytorch的mean和std调查实例
2020/01/02 Python
TensorFlow tf.nn.conv2d实现卷积的方式
2020/01/03 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
Ruby如何定义一个类
2012/10/08 面试题
思想政治自我鉴定
2013/10/06 职场文书
超市营业员岗位职责
2013/12/20 职场文书
物流仓储计划书
2014/01/10 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
赢在中国观后感
2015/06/02 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python