对自定义对象的元组进行排序,可以使用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>]
可以看到,已经按价格排序和品牌、价格排序,并返回了已排序的元组列表。