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实现通过代理服务器访问远程url的方法
Apr 29 Python
python实现文本文件合并
Dec 29 Python
python学习 流程控制语句详解
Jun 01 Python
python连接数据库的方法
Oct 19 Python
机器学习python实战之决策树
Nov 01 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
python 动态生成变量名以及动态获取变量的变量名方法
Jan 20 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
如何利用Python实现一个论文降重工具
Jul 09 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 批量替换程序的具体实现代码
2013/10/04 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
js+css实现打字效果
2020/06/24 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
js实现表格数据搜索
2020/08/09 Javascript
flask框架单元测试原理与用法实例分析
2019/07/23 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
GC是什么?为什么要有GC?
2013/12/08 面试题
《争吵》教学反思
2014/02/15 职场文书
拉歌口号大全
2014/06/13 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
现役军人家属慰问信
2015/03/24 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书