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解决字典中的值是列表问题的方法
Mar 04 Python
python使用递归解决全排列数字示例
Feb 11 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
python使用PyGame模块播放声音的方法
May 20 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
解决pycharm的Python console不能调试当前程序的问题
Jan 20 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
Python实现点云投影到平面显示
Jan 18 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 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常用数学函数汇总
2014/11/21 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
jquery的相对父元素和相对文档定位示例代码
2013/08/02 Javascript
JS与C#编码解码
2013/12/03 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
python字符串替换示例
2014/04/24 Python
Python实现远程调用MetaSploit的方法
2014/08/22 Python
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python daemon守护进程实现
2016/08/27 Python
Python 实现链表实例代码
2017/04/07 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
使用Pycharm分段执行代码
2020/04/15 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
浪费资源的建议书
2014/03/12 职场文书
作风年建设汇报材料
2014/08/14 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年招聘工作总结
2014/12/12 职场文书
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python