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中的array数组模块相关使用
Jul 05 Python
Python实现抢购IPhone手机
Feb 07 Python
python一键去抖音视频水印工具
Sep 14 Python
python实现自动解数独小程序
Jan 21 Python
python中树与树的表示知识点总结
Sep 14 Python
使用Python进行防病毒免杀解析
Dec 13 Python
Python模块 _winreg操作注册表
Feb 05 Python
详解Python IO口多路复用
Jun 17 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
Python调用Redis的示例代码
Nov 24 Python
python 实现体质指数BMI计算
May 26 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使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&amp;”)
2016/12/23 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
浅谈Vue.use的使用
2018/08/29 Javascript
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
python生成excel的实例代码
2017/11/08 Python
python如何统计序列中元素
2020/07/31 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
导游词之崇武古城
2019/10/07 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
redis实现的四种常见限流策略
2021/06/18 Redis
Java移除无效括号的方法实现
2021/08/07 Java/Android
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
口袋妖怪冰系十大最强精灵,几何雪花排第七,第六类似北极熊
2022/03/18 日漫