📜  在对象python中按多个键排序(1)

📅  最后修改于: 2023-12-03 15:23:32.546000             🧑  作者: Mango

在对象Python中按多个键排序

有时候需要对Python中的对象根据多个关键字进行排序。在本文中,我们将探讨使用Python内置的sorted()函数和通过定义__lt__特殊方法实现按多个键排序的方法。

1. 使用sorted()函数进行多关键字排序

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函数接受一个字典并返回一个包含年龄和分数的元组,这些元组将用作排序关键字。

2. 使用特殊方法对对象进行多关键字排序

如果要对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__方法进行年龄比较,然后根据分数排序。