Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例


Posted in Python onMarch 15, 2018

本文实例讲述了Python通过公共键对字典列表排序算法。分享给大家供大家参考,具体如下:

问题:想根据一个或多个字典中的值来对列表排序

解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的。

# Sort a list of a dicts on a common key
rows = [
  {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
  {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
  {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
  {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
from operator import itemgetter
rows_by_fname = sorted(rows, key=itemgetter('fname'))
rows_by_uid = sorted(rows, key=itemgetter('uid'))
from pprint import pprint
print("Sorted by fname:")
pprint(rows_by_fname) #pprint模块的pprint()提供了打印出任何python数据结构类和方法。
print("Sorted by uid:")
pprint(rows_by_uid)
rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
print("Sorted by lname,fname:")
pprint(rows_by_lfname)
>>> ================================ RESTART ================================
>>>
Sorted by fname:
[{'fname': 'Big', 'lname': 'Jones', 'uid': 1004},
 {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
 {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
 {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]
Sorted by uid:
[{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
 {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
 {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
 {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}]
Sorted by lname,fname:
[{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
 {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
 {'fname': 'Big', 'lname': 'Jones', 'uid': 1004},
 {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}]
>>>

补充说明:

有时候会利用lambda表达式来取代itemgetter()的功能:但是利用itemgetter()会运行的更快一些,所以考虑性能的话,应该使用itemgetter()

rows_by_fname = sorted(rows, key=lambda r:r['fname'])
rows_by_uid = sorted(rows, key=lambda r:r['uid'])

最后,本节展示的技术同样适用于min()max()这样的函数:

>>> min(rows, key=itemgetter('uid'))
{'lname': 'Cleese', 'fname': 'John', 'uid': 1001}
>>> max(rows, key=itemgetter('uid'))
{'lname': 'Jones', 'fname': 'Big', 'uid': 1004}
>>> itemgetter('uid')
<operator.itemgetter object at 0x023532F0>
>>>

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python标准库之循环器(itertools)介绍
Nov 25 Python
详细介绍Python中的偏函数
Apr 27 Python
如何在Python中编写并发程序
Feb 27 Python
django 2.0更新的10条注意事项总结
Jan 05 Python
python实现周期方波信号频谱图
Jul 21 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
python 字符串的驻留机制及优缺点
Jun 19 Python
如何把python项目部署到linux服务器
Aug 26 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
python实现马丁策略回测3000只股票的实例代码
Jan 22 Python
python批量实现Word文件转换为PDF文件
Mar 15 #Python
python实现求解列表中元素的排列和组合问题
Mar 15 #Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 #Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 #Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 #Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 #Python
python实现word 2007文档转换为pdf文件
Mar 15 #Python
You might like
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
详解angularjs popup-table 弹出框表格指令
2017/09/20 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
遗传算法之Python实现代码
2017/10/10 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
Python实现Linux监控的方法
2019/05/16 Python
python如何提升爬虫效率
2020/09/27 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
如何选择使用结构还是类
2014/05/30 面试题
电子专业自荐信
2014/07/01 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
2014年体育部工作总结
2014/11/13 职场文书
房产公证书样本
2015/01/23 职场文书
水电工岗位职责
2015/02/14 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
转变工作作风心得体会
2016/01/23 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android