📜  python 对多个键进行排序 - Python (1)

📅  最后修改于: 2023-12-03 14:46:14.392000             🧑  作者: Mango

Python 对多个键进行排序

在 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() 函数可以方便地对多个键值进行排序,大大简化了处理复杂数据结构的任务。通过指定排序规则,实现灵活的排序方式,可以让代码更加清晰易懂。