Подтвердить что ты не робот

Сортировка списка экземпляров класса Python

У меня есть список экземпляров класса -

x = [<iteminstance1>,...]

среди других атрибутов класс имеет атрибут score. Как я могу сортировать элементы в порядке возрастания на основе этого параметра?

EDIT: list в python имеет что-то, называемое sort. Могу ли я использовать это здесь? Как я могу направить эту функцию на использование моего атрибута score?

4b9b3361

Ответ 1

import operator
sorted_x = sorted(x, key=operator.attrgetter('score'))

если вы хотите отсортировать x на месте, вы также можете:

x.sort(key=operator.attrgetter('score'))

Ответ 2

В дополнение к принятому решению вы также можете реализовать специальный метод __lt__() ( "меньше" ) в классе. Метод sort() (и функция sorted()) затем сможет сравнивать объекты и тем самым сортировать их. Это лучше всего работает, когда вы будете только сортировать их по этому атрибуту.

class Foo(object):

     def __init__(self, score):
         self.score = score

     def __lt__(self, other):
         return self.score < other.score

l = [Foo(3), Foo(1), Foo(2)]
l.sort()