【python cookbook】【数据结构与算法】13.通过公共键对字典列表排序
2023-09-14 08:59:26 时间
问题:想根据一个或多个字典中的值来对列表排序
解决方案:利用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】python 多线程两种实现方式
- python找出数组中第二大的数
- python:pip升级pip本身和setuptools(Python 3.7.15)
- python 列表删除元素
- 【Python 22】52周存钱挑战2.0(列表list和math函数)
- python学习总结
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
- Python编程语言学习:包导入和模块搜索路径(包路径)简介、使用方法(python系统环境路径的查询与添加)之详细攻略
- Python编程语言学习:python的列表的特殊应用之一行命令实现if判断中的两类判断
- Python编程语言学习:python的列表的特殊应用之一行命令实现if判断中的两类判断
- 网瘾少年自制Python开源扫雷游戏,转手月入18K,附赠所有源文件
- 对比Excel,轻松学习 Python 报表自动化实战!
- Python办公自动化|一键生成数据分析报告
- 【华为OD机试 2023】 优选核酸检测点(C++ Java JavaScript Python)
- pycharm:格式化python代码
- Python极简地创建HTTP服务器
- python web py入门(51)- jQuery - $("").next()获取同级的下一个元素
- python基础===利用PyCharm进行Python远程调试(转)
- Python 排序与查找算法收集
- 〖Python语法进阶篇⑲〗- 综合实战 - 抽奖系统之user模块 - 获取用户与奖品列表
- 从零开始,学会Python爬虫不再难!!! -- (1)开篇:初识爬虫,基础铺垫 丨蓄力计划
- 第13讲:Python列表对象中元素的删操作
- 第8讲:Python中列表的概念与基本使用