在Python中,sorted()
函数支持根据多个值对可迭代对象进行排序,主要通过以下方式实现:
一、使用元组作为key
参数
通过key
参数返回一个元组,元组中的元素按优先级排序。例如,先按年龄排序,再按名字排序:
people = [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 25}]
sorted_people = sorted(people, key=lambda x: (x["age"], x["name"]))
print(sorted_people)
# 输出: [{'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 25}, {'name': 'Bob', 'age': 30}]
解释 :元组(x["age"], x["name"])
中,age
优先级高于name
,年龄相同的元素按名字排序。
二、使用itemgetter
函数
operator
模块的itemgetter
函数可简化key
参数的编写:
from operator import itemgetter
people = [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}, {"name": "Charlie", "age": 25}]
sorted_people = sorted(people, key=itemgetter("age", "name"))
print(sorted_people)
# 输出: [{'name': 'Alice', 'age': 25}, {'name': 'Charlie', 'age': 25}, {'name': 'Bob', 'age': 30}]
解释 :itemgetter("age", "name")
等价于lambda x: (x["age"], x["name"])
,但语法更简洁。
三、稳定排序特性
sorted()
是稳定排序算法,当多个元素的排序键相保留原始顺序。例如:
people = [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 25}, {"name": "Charlie", "age": 25}]
sorted_people = sorted(people, key=lambda x: x["age"])
print(sorted_people)
# 输出: [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 25}, {'name': 'Charlie', 'age': 25}]
解释 :年龄相同的Alice
、Bob
、Charlie
按插入顺序排列。
四、注意事项
-
sorted()
返回新列表,原数据不变;list.sort()
方法会修改原列表。 -
key
参数支持任何可调用对象(如函数、lambda表达式),实现复杂排序逻辑。
通过以上方法,可灵活实现多条件排序,满足不同场景需求。