根据列表属性

时间:2016-08-30 19:33:34

标签: python sorting

我有一个Car对象列表,每个对象的定义如下:

class Car:
    def __init__(self, vin, name, year, price, weight, desc, owner):
        self.uid = vin
        self.name = name
        self.year = year
        self.price = price
        self.weight = weight
        self.desc = desc
        self.owner = owner
        self.depreciation_values = self.get_depreciation_values(name, vin)

depreciation_values属性是一个包含8个组件的列表,如下所示:

[-12.90706937872767, -2.2011534921064739, '-17', '-51.52%', '-7', '-2.75%', '-5', '-1.74%']

第二个值(-2.2011534921064739)表示折旧因子,我正在尝试将其用作排序键。

我知道attrgetter:

car_list.sort(key=attrgetter('depreciation_values'))

但是这会根据depreciation_values的第一个值而不是第二个值对列表进行排序。

有没有办法根据折旧因子对所有对象进行排序?

2 个答案:

答案 0 :(得分:10)

您可以改为使用lambda来访问要排序的确切值:

car_list.sort(key=lambda x: x.depreciation_values[1])

答案 1 :(得分:0)

您可以定义__lt__() (less than) method和其他比较方法,根据您所需的排序属性返回布尔值,然后您可以使用内置的sorted()或list.sort()"... sort routines are guaranteed to use __lt__() ... "

class Car:
    ...
    def __lt__(self, other):
        self.depreciation_values[1] < other..depreciation_values[1]
相关问题