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中利用sqrt()方法进行平方根计算的教程
May 15 Python
Python程序中用csv模块来操作csv文件的基本使用教程
Mar 03 Python
Python开发的HTTP库requests详解
Aug 29 Python
python中获得当前目录和上级目录的实现方法
Oct 12 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 Python
python实现对csv文件的列的内容读取
Jul 04 Python
python读取TXT每行,并存到LIST中的方法
Oct 26 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
Feb 08 Python
Python求均值,方差,标准差的实例
Jun 29 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
python归并排序算法过程实例讲解
Nov 04 Python
python全栈开发语法总结
Nov 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 在文件指定行插入数据的代码
2010/05/08 PHP
php 常用类汇总 推荐收藏
2010/05/13 PHP
如何使用php输出时间格式
2013/08/31 PHP
三种php连接access数据库方法
2013/11/11 PHP
PHP 错误处理机制
2015/07/06 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
Javascript引用指针使用介绍
2012/11/07 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
Python编码爬坑指南(必看)
2016/06/10 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
详解Python高阶函数
2020/08/15 Python
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
舞蹈教育学专业推荐信
2013/11/27 职场文书
团员个人的自我评价
2013/12/02 职场文书
大学生简历的个人自我评价
2013/12/04 职场文书
给领导的致歉信范文
2014/01/13 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
会计简历自我评价
2015/03/10 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
python实现双链表
2022/05/25 Python