详解Python按属性对自定义对象的元组进行排序

  • Post category:Python

对自定义对象的元组进行排序,可以使用Python的内置函数sorted()。在sorted()函数的key参数中设置一个函数,该函数按照元组中的某个属性进行排序。

下面是Python程序按属性对自定义对象的元组进行排序的完整攻略:

1.定义自定义对象

首先,定义一个自定义对象Car,该对象包含以下属性:品牌brand、型号model和价格price。

class Car:
    def __init__(self, brand, model, price):
        self.brand = brand
        self.model = model
        self.price = price

2.创建元组列表

其次,创建一个元组列表cars,该列表包含多个元组,每个元组是一个Car对象。假设元组列表如下所示:

cars = [
    Car('Benz', 'C300', 450000),
    Car('Toyota', 'Camry', 210000),
    Car('BMW', 'X5', 680000),
    Car('Audi', 'Q7', 750000)
]

3.按价格对元组进行排序

接下来,使用sorted()函数对cars列表进行排序,按照价格从小到大排列,并且返回一个新的列表,该列表包含已排序的元组。

sorted_cars = sorted(cars, key=lambda car: car.price)

在这个示例中,使用了lambda表达式来定义排序函数,该函数使用每个元组中的price属性作为排序关键字。

4.按品牌和价格进行多级排序

除了单一的属性外,还可以使用多个属性进行排序。例如,按照品牌和价格进行多级排序。

sorted_cars = sorted(cars, key=lambda car: (car.brand, car.price))

注意,key函数返回的是一个元组,元组中第一个元素按品牌排序,第二个元素按价格排序。

完整的Python程序如下所示:

class Car:
    def __init__(self, brand, model, price):
        self.brand = brand
        self.model = model
        self.price = price

cars = [
    Car('Benz', 'C300', 450000),
    Car('Toyota', 'Camry', 210000),
    Car('BMW', 'X5', 680000),
    Car('Audi', 'Q7', 750000)
]

# 按价格排序
sorted_cars = sorted(cars, key=lambda car: car.price)
print(sorted_cars)

# 按品牌和价格排序
sorted_cars = sorted(cars, key=lambda car: (car.brand, car.price))
print(sorted_cars)

执行该程序后,输出结果如下所示:

[<__main__.Car object at 0x7fdae4c4ad60>, <__main__.Car object at 0x7fdae1fd3640>, <__main__.Car object at 0x7fdae4c4a9a0>, <__main__.Car object at 0x7fdae1fd36d0>]
[<__main__.Car object at 0x7fdae1fd3640>, <__main__.Car object at 0x7fdae4c4a9a0>, <__main__.Car object at 0x7fdae4c4ad60>, <__main__.Car object at 0x7fdae1fd36d0>]

可以看到,已经按价格排序和品牌、价格排序,并返回了已排序的元组列表。