Python 中如何按字典的某个值对字典列表排序?

对字典列表按某个键的值排序:sorted(list, key=lambda x: x['age']);倒序加 reverse=True;itemgetter 更快。本文介绍各种排序写法。

最佳实践
Python 中如何按字典的某个值对字典列表排序?封面

sorted()key 函数:sorted(my_list, key=lambda x: x['age']) 按 age 升序;reverse=True 变降序;operator.itemgetter('age') 是略快的等价写法。

基本用法

users = [
    {'name': '张三', 'age': 28},
    {'name': '李四', 'age': 22},
    {'name': '王五', 'age': 35},
]

# 按 age 升序
sorted_users = sorted(users, key=lambda x: x['age'])

# 按 age 降序
sorted_users = sorted(users, key=lambda x: x['age'], reverse=True)

sorted() 返回新列表,原列表不变;想原地排序用 my_list.sort(key=...)

itemgetter(略快)

from operator import itemgetter

sorted_users = sorted(users, key=itemgetter('age'))

多字段排序

# 先按 age 降序,再按 name 升序
sorted(users, key=lambda x: (-x['age'], x['name']))

处理缺失键

某些字典可能没有目标键,直接访问会 KeyError:

sorted(users, key=lambda x: x.get('age', 0))   # 缺失键按 0 处理

常见问题(FAQ)

Q:排序稳定吗?
A:Python 的排序是稳定的——值相同的元素保持原有相对顺序,所以多字段排序也可以分多次单字段排序实现(先排次要字段再排主要字段)。

Q:日期字符串能直接排吗?
A:ISO 格式(YYYY-MM-DD)字符串的字典序与时间序一致,可以直接排;其他格式需要先转成 datetime。

Q:值类型不一致(有 int 有 str)会怎样?
A:Python 3 中混合类型比较会抛 TypeError。先统一类型或在 key 函数里转换。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台