Python Cookbook 1.13 通过公共键对字典列表排序

本文介绍了一种使用Python的operator模块中的itemgetter函数对字典列表进行高效排序的方法,避免了手动编写排序函数的繁琐,同时提供了性能上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一个列表如下,每一个元素都是字典,这些字典都有一个公共键,现在要根据这些公共键对这个列表进行排序,怎么办?

rows = [
{'fname': 'Brain', 'uid': 1003},
{'fname': 'David', 'uid': 1002},
{'fname': 'John', 'uid': 1001},
{'fname': 'Big', 'uid': 1004}]

如果是硬上,做法应该是遍历其中的每一个元素,然后根据每个字典的公共键的值的大小重新写入一个列表,最终得到的结果就是排序之后的结果。

这里推荐一个 Python 的一个模块可以免去我们自己写函数的操作,那就是:

from operator import itemgetter

sorted(rows, key=itemgetter('fname'))
Out[18]: 
[{'fname': 'Big', 'uid': 1004},
 {'fname': 'Brain', 'uid': 1003},
 {'fname': 'David', 'uid': 1002},
 {'fname': 'John', 'uid': 1001}]

#注意,sorted 之后会返回一个新的字典列表,而不是直接在原列表进行修改
rows
Out[19]: 
[{'fname': 'Brain', 'uid': 1003},
 {'fname': 'David', 'uid': 1002},
 {'fname': 'John', 'uid': 1001},
 {'fname': 'Big', 'uid': 1004}]

#这个操作其实等同于 lambda 的如下用法:
sorted(rows, key=lambda x: x['fname'])

如果要考虑输入多个参数:

sorted(rows, key=itemgetter('fname', 'uud'))
等同于
sorted(rows, key=lambda x: (x['fname'], x['uid']))

两种方法都可以,但是如果考虑到性能问题,应该使用 itemgetter。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值