Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018-03-15 11:39
736 查看
本文实例讲述了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函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- Python cookbook(数据结构与算法)字典相关计算问题示例
- Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
- Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
- Python cookbook(数据结构与算法)从字典中提取子集的方法示例
- Python cookbook(数据结构与算法)让字典保持有序的方法
- Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
- Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
- Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
- Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
- Python cookbook(数据结构与算法)实现优先级队列的方法示例
- Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
- Python实现嵌套列表及字典并按某一元素去重复功能示例
- Python 列表、元组、集合、字典、Json、数组、矩阵 简单示例说明
- python cookbook第三版学习笔记二:字典
- Python: 字典列表: 通过某个字段将记录分组
- 通过示例学习Python列表推导
- Python利用公共键如何对字典列表进行排序详解
- Python字符串列表元祖字典的公共方法
- Python cookbook(数据结构与算法)对切片命名清除索引的方法
- Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法