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 10 Python
python构建自定义回调函数详解
Jun 20 Python
用Python实现随机森林算法的示例
Aug 24 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
Python多分支if语句的使用
Sep 03 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
python中常用的数据结构介绍
Jan 12 Python
Python实现简单的俄罗斯方块游戏
Sep 25 Python
python多次执行绘制条形图
Apr 20 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/08/17 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
js实现Select头像选择实时预览代码
2015/08/17 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
小程序click-scroll组件设计
2019/06/18 Javascript
详解Python中的type()方法的使用
2015/05/21 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
python不同系统中打开方法
2020/06/23 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
降消项目实施方案
2014/03/30 职场文书
销售团队激励口号
2014/06/06 职场文书
企业标语口号
2014/06/10 职场文书
环境卫生倡议书
2014/08/29 职场文书
党性心得体会
2014/09/03 职场文书
博士生专家推荐信
2015/03/25 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS