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使用range函数计算一组数和的方法
May 07 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
python对DICOM图像的读取方法详解
Jul 17 Python
Python实现调度算法代码详解
Dec 01 Python
Python装饰器用法实例分析
Jan 14 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
利用 Python ElementTree 生成 xml的实例
Mar 06 Python
Python3.7下安装pyqt5的方法步骤(图文)
May 12 Python
python实现简单贪吃蛇游戏
Sep 29 Python
python实现调用摄像头并拍照发邮箱
Apr 27 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
php+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
php获取twitter最新消息的方法
2015/04/14 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
angular动态表单制作
2018/02/23 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
python使用chardet判断字符串编码的方法
2015/03/13 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
如何基于python生成list的所有的子集
2019/11/11 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
python中scipy.stats产生随机数实例讲解
2021/02/19 Python
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
2014年教研活动总结范文
2014/04/26 职场文书
初中新生军训方案
2014/05/13 职场文书
2014年秋季开学典礼致辞
2014/08/02 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
党员检讨书范文
2014/12/27 职场文书
天那边观后感
2015/06/09 职场文书