📅  最后修改于: 2023-12-03 14:46:14.392000             🧑  作者: Mango
在 Python 中,可以使用 sorted()
函数对多个键(或属性)进行排序。通过传递参数 key
,可以指定排序规则。这在处理一些复杂的数据结构时非常有用,比如一个包含多个键值对的字典或一个包含多个属性的对象。
sorted(iterable, key=None, reverse=False)
iterable
:要排序的可迭代对象。(必需)key
:用于排序的函数。如果不指定,则按照元素自身进行比较。(可选)reverse
:排序的顺序。如果为 True
,则倒序排序。(可选)假设有一个包含多个字典的列表,每个字典包含一个学生的姓名、年龄和成绩:
students = [
{'name': 'Alice', 'age': 20, 'score': 80},
{'name': 'Bob', 'age': 22, 'score': 90},
{'name': 'Cathy', 'age': 21, 'score': 85},
{'name': 'David', 'age': 23, 'score': 95},
{'name': 'Emily', 'age': 19, 'score': 75}
]
要按照年龄和成绩的从小到大的顺序对学生进行排序,可以这样写:
sorted(students, key=lambda s: (s['age'], s['score']))
这里使用了一个 lambda
函数作为排序规则,函数返回一个元组 (s['age'], s['score'])
,表示首先按照年龄升序排序,然后按照成绩升序排序。运行上面的代码,将得到以下结果:
[
{'name': 'Emily', 'age': 19, 'score': 75},
{'name': 'Alice', 'age': 20, 'score': 80},
{'name': 'Cathy', 'age': 21, 'score': 85},
{'name': 'Bob', 'age': 22, 'score': 90},
{'name': 'David', 'age': 23, 'score': 95}
]
如果要倒序排序,可以将 reverse
参数设为 True
:
sorted(students, key=lambda s: (s['age'], s['score']), reverse=True)
这里将会得到以下结果:
[
{'name': 'David', 'age': 23, 'score': 95},
{'name': 'Bob', 'age': 22, 'score': 90},
{'name': 'Cathy', 'age': 21, 'score': 85},
{'name': 'Alice', 'age': 20, 'score': 80},
{'name': 'Emily', 'age': 19, 'score': 75}
]
Python 中的 sorted()
函数可以方便地对多个键值进行排序,大大简化了处理复杂数据结构的任务。通过指定排序规则,实现灵活的排序方式,可以让代码更加清晰易懂。