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设置检查点简单实现代码
Jul 01 Python
在Python的Flask框架中使用模版的入门教程
Apr 20 Python
在Python中使用poplib模块收取邮件的教程
Apr 29 Python
python字符串的常用操作方法小结
May 21 Python
一百行python代码将图片转成字符画
Feb 19 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
Python3最长回文子串算法示例
Mar 04 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Python常用类型转换实现代码实例
Jul 28 Python
Python入门基础之数字字符串与列表
Feb 01 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 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
如何删除多级目录
2006/10/09 PHP
PHP基础学习小结
2011/04/17 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
跟我学Laravel之请求与输入
2014/10/15 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
让Firefox支持event对象实现代码
2009/11/07 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
jquery实现的缩略图预览滑块实例
2015/06/25 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
Python unittest 简单实现参数化的方法
2018/11/30 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
python 的topk算法实例
2020/04/02 Python
django form和field具体方法和属性说明
2020/07/09 Python
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
物业总经理助理岗位职责
2014/06/29 职场文书
美术学专业求职信
2014/07/23 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
婚前保证书范文
2015/02/28 职场文书
离职信范本
2015/06/23 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
2016年国庆节假期旅游工作总结
2016/04/01 职场文书