在 Python 中,可以使用 sorted()
函数配合 lambda
匿名函数对字典列表进行排序。以下是几种常见场景的示例:
1. 按字典的某个键升序排序
people = [
{'name': 'Alice', 'age': 30},
{'name': 'Bob', 'age': 25},
{'name': 'Charlie', 'age': 35}
]
sorted_people = sorted(people, key=lambda x: x['age'])
# 结果:[{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]
2. 按键降序排序(添加 reverse=True
)
sorted_people = sorted(people, key=lambda x: x['age'], reverse=True)
# 结果:[{'name': 'Charlie', 'age': 35}, {'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}]
3. 按多个键排序(返回元组)
# 先按 age 升序,age 相同时按 name 升序
sorted_people = sorted(people, key=lambda x: (x['age'], x['name']))
# 先按 age 降序,age 相同时按 name 升序
sorted_people = sorted(people, key=lambda x: (-x['age'], x['name']))
4. 处理缺失键(使用 get()
设置默认值)
# 若某些字典可能缺少 'age' 键
people = [
{'name': 'Alice', 'age': 30},
{'name': 'Bob'}, # 无 age
{'name': 'Charlie', 'age': 35}
]
sorted_people = sorted(people, key=lambda x: x.get('age', 0)) # 缺 age 时默认为 0
# 结果:Bob → Alice → Charlie
5. 按嵌套字典的值排序
users = [
{'name': 'Alice', 'info': {'score': 90}},
{'name': 'Bob', 'info': {'score': 85}}
]
sorted_users = sorted(users, key=lambda x: x['info']['score'], reverse=True)
# 结果:Alice (90) → Bob (85)
6. 复杂规则(如字符串长度排序)
# 按 name 的字符串长度排序
sorted_people = sorted(people, key=lambda x: len(x['name']))
# Alice(5) < Bob(3) < Charlie(7) → Bob, Alice, Charlie
关键说明:
lambda
函数:定义排序依据,格式为lambda x: expression
,x
是列表中的字典元素。- 返回类型:
key
函数应返回可比较的值(如数字、字符串或元组)。 - 多级排序:返回元组
(key1, key2)
实现优先级排序。 - 稳定性:
sorted()
是稳定排序,相同键元素的原始顺序会被保留。
通过调整 lambda
中的表达式,可灵活实现各种排序需求!