Python - Как отсортировать список по атрибуту из другого класса - PullRequest
0 голосов
/ 10 января 2011

У меня есть несколько элементов в списке в одном классе. Я хочу, чтобы они были отсортированы в новом списке, и они должны быть отсортированы по атрибуту из другого класса.

Кто-нибудь может привести пример?

Пока мой код выглядит так:

class Carcompany:
  def __init__(self, model, production_number):
    self.model = model
    self.production_number = production_number
    self.car_list = []

  def add_car_to_car_list(self, car):
    self.car_list.append(car)

class Info:
  def __init__(self):
    self.license_plate_number = []

  def add_license_plate_to_list(self, license_plate):
    self.license_plate_number.append(license_plate)

Мне нужно self.car_list отсортировать по self.license_plate_number - сначала по наибольшему номеру. Я не знаю, сколько мне не хватает, чтобы туда добраться. Я ценю любую помощь, которую я могу получить:)

Ответы [ 2 ]

5 голосов
/ 10 января 2011

Для сортировки списка объектов, имеющих атрибут bar:

anewlist = sorted(list, key=lambda x: x.bar)
2 голосов
/ 10 января 2011

Вы говорите, что у вас уже есть классы (покажите их!), Поэтому вы можете сделать их сортируемыми, определив __lt__:

class Car(object):
    def __init__(self, year, plate):
        self.year = year
        self.plate = plate

    # natural sort for cars by year:
    def __lt__(self, other):
        return self.year < other.year

    def __repr__(self):
        return "Car (%d) %r" % (self.year, self.plate)

class Plate(object):
    def __init__(self, val):
        self.val = val

    def __repr__(self):
        return repr(self.val)

    # natural sort by val:
    def __lt__(self, other):
        return self.val < other.val

cars = [ Car(2009, Plate('A')),
              Car(2007, Plate('B')),
              Car(2006, Plate('C'))
]

print cars
print sorted(cars) # sort cars by their year
print sorted(cars, key=lambda car: car.plate) # sort by plate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...