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利用paramiko连接远程服务器执行命令的方法
Oct 16 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
解决pycharm工程启动卡住没反应的问题
Jan 19 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
Django的Modelforms用法简介
Jul 27 Python
python django中8000端口被占用的解决
Dec 17 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
Python函数参数分类原理详解
May 28 Python
python使用dlib进行人脸检测和关键点的示例
Dec 05 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
python实现web邮箱扫描的示例(附源码)
Mar 30 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自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
js 数组克隆方法 小结
2010/03/20 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
微信小程序实现全国机场索引列表
2018/01/31 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
Vue Element校验validate的实例
2020/09/21 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
安全标准化实施方案
2014/02/20 职场文书
技术合作协议书范本
2014/04/18 职场文书
局火灾防控工作方案
2014/05/25 职场文书
村道德模范事迹材料
2014/08/28 职场文书
2014企业年终工作总结
2014/12/23 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
表彰大会新闻稿
2015/07/17 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
javaScript Array api梳理
2021/03/31 Javascript
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
Vue的过滤器你真了解吗
2022/02/24 Vue.js