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访问类中docstring注释的实现方法
May 04 Python
详解Django中的权限和组以及消息
Jul 23 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
python实现图片识别汽车功能
Nov 30 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
Python数据模型与Python对象模型的相关总结
Jan 26 Python
python脚本框架webpy的url映射详解
Nov 20 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 zip文件解压类代码
2009/12/02 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
js中function()使用方法
2013/12/24 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
javascript常用的设计模式
2017/02/09 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
详解Vite的新体验
2021/02/22 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
python编程开发之日期操作实例分析
2015/11/13 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
Python字符串的常见操作实例小结
2019/04/08 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
2020/08/05 Python
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
应届毕业生求职自荐书
2014/01/03 职场文书
端午节活动策划方案
2014/03/09 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
教学督导岗位职责
2015/04/10 职场文书
离职信范本
2015/06/23 职场文书
餐厅开业活动方案
2019/07/08 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技