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实现将文本转换成语音的方法
May 28 Python
Python unittest模块用法实例分析
May 25 Python
浅谈Python traceback的优雅处理
Aug 31 Python
详解Python学习之安装pandas
Apr 16 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
python函数声明和调用定义及原理详解
Dec 02 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
详解Python中如何将数据存储为json格式的文件
Nov 18 Python
python sleep和wait对比总结
Feb 03 Python
pytorch 如何使用amp进行混合精度训练
May 24 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
php中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
php组合排序简单实现方法
2016/10/15 PHP
PHP 实现链式操作
2021/03/09 PHP
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python实现的简单算术游戏实例
2015/05/26 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
keras之权重初始化方式
2020/05/21 Python
css3 transform属性详解
2014/09/30 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
外贸英语专业求职信范文
2013/12/25 职场文书
林肯就职演讲稿
2014/05/19 职场文书
学校志愿者活动总结
2014/06/27 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
承诺书范本
2015/01/21 职场文书
民间借贷被告代理词
2015/05/23 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
统招统分证明
2015/06/23 职场文书