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;已有 age=None 不会替换为0

常见问题(FAQ)

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

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

Q:值类型不一致(有 int 有 str)会怎样?
A:无法互相排序的类型(如 int 与 str 或 None)会抛 TypeError;int/float 等可比较组合并非一概禁止。先统一类型或在 key 函数里转换。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台