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出现_warn_unsafe_extraction问题的方法
Mar 24 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
Apr 18 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
Python使用sort和class实现的多级排序功能示例
Aug 15 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
python SVD压缩图像的实现代码
Nov 05 Python
Python常用库大全及简要说明
Jan 17 Python
django 扩展user用户字段inlines方式
Mar 30 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
Mar 03 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中常见的密码处理方式和建议总结
2018/10/14 PHP
js获取ajax返回值代码
2014/04/30 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
python获取android设备的GPS信息脚本分享
2015/03/06 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
Python多线程扫描端口代码示例
2018/02/09 Python
Python 类的特殊成员解析
2018/06/20 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
PyQt5响应回车事件的方法
2019/06/25 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
Python实现AI换脸功能
2020/04/10 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
C有"按引用传递"吗
2016/09/06 面试题
EJB的几种类型
2012/08/15 面试题
大三毕业自我鉴定
2014/01/15 职场文书
管理标语大全
2014/06/24 职场文书
标准毕业生自荐信
2014/06/24 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
百家讲坛观后感
2015/06/12 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
node快速搭建后台的实现步骤
2022/02/18 NodeJs
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python