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中比较特别的除法运算和幂运算介绍
Apr 05 Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 Python
python文件与目录操作实例详解
Feb 22 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
Python数据持久化存储实现方法分析
Dec 21 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
Python利用Xpath选择器爬取京东网商品信息
Jun 01 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
jQuery下的几个你可能没用过的功能
2010/08/29 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
详解Angular2 关于*ngFor 嵌套循环
2017/05/22 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
基于vue实现一个禅道主页拖拽效果
2019/05/27 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
linux 下实现python多版本安装实践
2014/11/18 Python
python实现在windows下操作word的方法
2015/04/28 Python
python实现共轭梯度法
2019/07/03 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python数据化运营的重要意义
2019/11/25 Python
详解Scrapy Redis入门实战
2020/11/18 Python
python进行二次方程式计算的实例讲解
2020/12/06 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
艾滋病宣传标语
2014/06/25 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
基层工作经验证明样本
2014/11/16 职场文书
放飞理想主题班会
2015/08/14 职场文书
财务年终工作总结大全
2019/06/20 职场文书