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实现的弹球小游戏示例
Aug 01 Python
python和ruby,我选谁?
Sep 13 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
Python tkinter三种布局实例详解
Jan 06 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python小白不正确的使用类变量实例
May 29 Python
Opencv 图片的OCR识别的实战示例
Mar 02 Python
Python办公自动化解决world文件批量转换
Sep 15 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之第十天
2006/10/09 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
Python实现从url中提取域名的几种方法
2014/09/26 Python
Python下的twisted框架入门指引
2015/04/15 Python
使用python实现ANN
2017/12/20 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
如何用PHP实现邮件发送
2012/12/26 面试题
英语道歉信范文
2014/01/09 职场文书
劳动之星获奖感言
2014/02/01 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
工作态度不好检讨书
2015/05/06 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis