Python利用公共键如何对字典列表进行排序详解


Posted in Python onMay 19, 2018

前言

在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Python中字典的排序分为按“键”排序和按“值”排序。下面话不多说了,来一起看看详细的介绍吧

问题描述

我们有一个字典列表,想根据一个或多个字典中的值来对列表排序。

例如,有如下字典列表,根据字典中的x,由大到小排序这个列表:

l = [{'x':1, 'y':2}, {'x':2, 'y':3}, {'x':3, 'y':4}]

解决方案

排序用sorted内置函数,关键字key参数用lambda表达式取出字典中x值作为排序依据,关键字reverse参数设置为True用来由大到小降序排序。

>>> l = [{'x':1, 'y':2}, {'x':2, 'y':3}, {'x':3, 'y':4}]
>>> l1 = sorted(l, key=lambda d:d['x'], reverse=True)
>>> l1
[{'y': 4, 'x': 3}, {'y': 3, 'x': 2}, {'y': 2, 'x': 1}]
>>>

也可以用operator模块中的itemgetter函数取出字典中某个键的值,作为排序依据。

>>> from operator import itemgetter
>>> l = [{'x':1, 'y':2}, {'x':2, 'y':3}, {'x':3, 'y':4}]
>>> l2 = sorted(l, key=itemgetter('x'), reverse=True)
>>> l2
[{'y': 4, 'x': 3}, {'y': 3, 'x': 2}, {'y': 2, 'x': 1}]
>>>

讨论

函数operator.itemgetter()接受的参数可以作为查询的标记,它可以是字典的键名称、用数字表示的列表元素或是任何可以传给对象的__getitem__()方法的值。如果传多个标记给itemgetter() ,那么它产生的可调用对象将返回一个包含所有元素在内的元组,然后sorted()将根据对元组的排序结果来排列输出结果。如果想同时针对多个字段做排序(比如x和y),那么这是非常有用的。

有时候会用lambda表达式来取代itemgetter()的功能。例如:

l_by_x = sorted(l, key=lambda d:d['x'])
l_by_xy = sorted(l, key=lambda d:(d['x'], d['y']))

这种解决方案通常也能正常工作,但是用itemgetter()通常会运行得更快一些。因此如果要考虑性能问题的话,应该使用itemgetter()

l_by_x = sorted(l, key=itemgetter('x'))
l_by_xy = sorted(l, key=itemgetter('x', 'y'))

最后不要忘了本文中展示的技术同样适用于min()max()函数。例如:

>>> min(l, key=itemgetter('x'))
{'y': 2, 'x': 1}
>>> max(l, key=itemgetter('x', 'y'))
{'y': 4, 'x': 3}
>>> max(l, key=itemgetter('x'))
{'y': 4, 'x': 3}
>>>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python 高效去重复 支持GB级别大文件的示例代码
Nov 08 Python
python列表list保留顺序去重的实例
Dec 14 Python
python+pyqt5实现KFC点餐收银系统
Jan 24 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
用Python抢火车票的简单小程序实现解析
Aug 14 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
python 图像的离散傅立叶变换实例
Jan 02 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
May 27 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 Python
python读取mat文件生成h5文件的实现
Jul 15 Python
Python中一些不为人知的基础技巧总结
May 19 #Python
Python + selenium自动化环境搭建的完整步骤
May 19 #Python
pandas中去除指定字符的实例
May 18 #Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 #Python
对pandas replace函数的使用方法小结
May 18 #Python
基于DataFrame筛选数据与loc的用法详解
May 18 #Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 #Python
You might like
开源SNS系统-ThinkSNS
2008/05/18 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
深入浅出php socket编程
2015/05/13 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
影视艺术学院毕业生自荐信
2013/11/13 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
投标担保书范文
2014/04/02 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
应届大学生自荐书
2014/06/17 职场文书
现实表现材料范文
2014/12/23 职场文书
大雁塔导游词
2015/02/04 职场文书
工作时间证明
2015/06/15 职场文书
网吧员工管理制度
2015/08/05 职场文书
导游词之山东红叶谷
2019/10/31 职场文书