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服务器与android客户端socket通信实例
Nov 12 Python
浅谈python多线程和队列管理shell程序
Aug 04 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
Python3实现的字典遍历操作详解
Apr 18 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
Jun 17 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
用python实现名片管理系统
Jun 18 Python
python设置表格边框的具体方法
Jul 17 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 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
div移动 输入框不能输入的问题
2009/11/19 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
python2 与python3的print区别小结
2018/01/16 Python
通过Python 接口使用OpenCV的方法
2018/04/02 Python
浅谈django的render函数的参数问题
2018/10/16 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
kafka-python批量发送数据的实例
2018/12/27 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
pandas的qcut()方法详解
2019/07/06 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
成品库仓管员岗位职责
2014/04/06 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
个人向公司借款协议书
2014/10/09 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
Python 内置函数速查表一览
2021/06/02 Python
python字典进行运算原理及实例分享
2021/08/02 Python
php去除deprecated的实例方法
2021/11/17 PHP