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处理json字符串转化为字典的简单实现
Jul 07 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
python函数的万能参数传参详解
Jul 26 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
Python实现验证码识别
Jun 15 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Python离线安装各种库及pip的方法
Nov 28 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 Python
如何通过python检查文件是否被占用
Dec 18 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 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程序猿都应该拜读的书
2014/12/31 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
js 替换
2008/02/19 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
结束运行python的方法
2020/06/16 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
临床医师专业个人自我评价
2014/01/08 职场文书
入党积极分子介绍信
2014/01/17 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
民生工程实施方案
2014/03/22 职场文书
服务行业口号
2014/06/11 职场文书
营销与策划实训报告
2014/11/05 职场文书
详解Python requests模块
2021/06/21 Python
java泛型通配符详解
2021/07/25 Java/Android