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十进制和二进制的转换方法(含浮点数)
Jul 07 Python
django缓存配置的几种方法详解
Jul 16 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
Django框架HttpResponse对象用法实例分析
Nov 01 Python
Python:type、object、class与内置类型实例
Dec 25 Python
Python编程快速上手——选择性拷贝操作案例分析
Feb 28 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
keras用auc做metrics以及早停实例
Jul 02 Python
scrapy结合selenium解析动态页面的实现
Sep 28 Python
python 实现Requests发送带cookies的请求
Feb 08 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/05/24 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
PHP错误处理函数
2016/04/03 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
javascript 打印页面代码
2009/03/24 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
jquery实现文本框的禁用和启用
2016/12/07 Javascript
js数组实现权重概率分配
2017/09/12 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
企业车辆管理制度
2014/01/24 职场文书
女生节标语
2014/06/26 职场文书
作息时间调整通知
2015/04/22 职场文书
警告通知
2015/04/25 职场文书
安全生产标语口号
2015/12/26 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL