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之做一个小游戏
Sep 28 Python
Python类的专用方法实例分析
Jan 09 Python
在Python中处理日期和时间的基本知识点整理汇总
May 22 Python
21行Python代码实现拼写检查器
Jan 25 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
详解Python3定时器任务代码
Sep 23 Python
matplotlib实现显示伪彩色图像及色度条
Dec 07 Python
信号生成及DFT的python实现方式
Feb 25 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
在python中利用pycharm自定义代码块教程(三步搞定)
Apr 15 Python
python解包概念及实例
Feb 17 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 foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
php 安全过滤函数代码
2011/05/07 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
制作特殊字的脚本
2006/06/26 Javascript
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
python中使用psutil查看内存占用的情况
2018/06/11 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
会计自我鉴定范文
2013/10/06 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
80后婚前协议书范本
2014/10/24 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
监察建议书
2015/02/04 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
信用卡收入证明范本
2015/06/12 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏
Redis实战之Lettuce的使用技巧详解
2022/12/24 Redis