Ответ 1
import operator
sorted_x = sorted(x, key=operator.attrgetter('score'))
если вы хотите отсортировать x на месте, вы также можете:
x.sort(key=operator.attrgetter('score'))
У меня есть список экземпляров класса -
x = [<iteminstance1>,...]
среди других атрибутов класс имеет атрибут score
. Как я могу сортировать элементы в порядке возрастания на основе этого параметра?
EDIT: list
в python имеет что-то, называемое sort
. Могу ли я использовать это здесь? Как я могу направить эту функцию на использование моего атрибута score
?
import operator
sorted_x = sorted(x, key=operator.attrgetter('score'))
если вы хотите отсортировать x на месте, вы также можете:
x.sort(key=operator.attrgetter('score'))
В дополнение к принятому решению вы также можете реализовать специальный метод __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()