2011-01-10 52 views
0

我在一個類的列表中有一些元素。我希望他們排序在一個新的列表中,他們必須從另一個類的屬性排序。Python - 如何通過來自其他類的屬性對列表進行排序

任何人都可以舉個例子嗎?

到目前爲止我的代碼看起來是這樣的:

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_listself.license_plate_number排序 - 第一最多。我不知道我錯過了多少。我感謝所有幫助我能:)

+6

你應該給我們的原始列表是如何存儲一個簡單的例子,什麼元素樣子。 – 2011-01-10 15:54:04

+0

該列表如下所示:[「car1」,「car2」,「car3」] - 我希望它們按車牌號進行排序,這是另一個名爲Info的類中的屬性。他們必須先以最高的數字排序。 – 2011-01-10 16:30:32

回答

5

要那種有屬性bar對象的列表:

anewlist = sorted(list, key=lambda x: x.bar) 
2

你說你上課已經(!告訴他們),這樣就可以使它們排序通過定義__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 
相關問題