📅  最后修改于: 2023-12-03 15:23:32.546000             🧑  作者: Mango
有时候需要对Python中的对象根据多个关键字进行排序。在本文中,我们将探讨使用Python内置的sorted()函数和通过定义__lt__特殊方法实现按多个键排序的方法。
sorted()函数可以排序包含字典的序列。如果字典中的键值对相同,则可以使用sorted()函数的key参数根据另一个键进行排序。例如,考虑以下字典列表:
data = [
{'name': 'John', 'age': 23, 'score': 80},
{'name': 'Mike', 'age': 22, 'score': 80},
{'name': 'Alice', 'age': 25, 'score': 90},
{'name': 'Bob', 'age': 23, 'score': 70}
]
要按年龄和分数对这个列表进行排序,可以像这样使用sorted()函数:
sorted_data = sorted(data, key=lambda x: (x['age'], x['score']))
在这个例子中,lambda函数接受一个字典并返回一个包含年龄和分数的元组,这些元组将用作排序关键字。
如果要对Python对象进行排序,可以定义一个__lt__特殊方法,这个方法将在使用基于小于()操作符进行排序时被调用。例如,考虑以下Student类:
class Student:
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
def __lt__(self, other):
if self.age == other.age:
return self.score < other.score
return self.age < other.age
在这个示例中,我们定义了一个Student类,其中__lt__方法根据年龄和分数比较两个对象。
现在,我们可以创建一个Student对象列表并按多关键字排序:
students = [
Student("John", 23, 80),
Student("Mike", 22, 80),
Student("Alice", 25, 90),
Student("Bob", 23, 70)
]
sorted_students = sorted(students)
在这个例子中,sorted()函数将首先调用Student类的__lt__方法进行年龄比较,然后根据分数排序。