我有这堂课:
class Model:
name = None
price = None
像这样的Model
个实例的简单数组:
name ; price
BMW 4-series ; 90
BMW Z4 ; 190
BMW X5 ; 220
Lamborghini Miura ; 910
Ferrari 458 Italia ; 580
Ferrari California T ; 530
依此类推......我需要以两种方式对这个数组进行排序:首先,按品牌(所以,首先是BMW产品)然后按价格排序,而不是去除之前的效果。
问题是如果我sort()
按name
属性排序,然后按price
排序,则第一次排序效果将会丢失。我该怎么办?
答案 0 :(得分:5)
所有sort
函数都使用可选的kwarg key
。它可以与元组自然排序以自然地构建匿名lambda
函数这样的事实一起使用:
lst = [Model(name='BMW 4-series',price=90), ... ]
lst.sort(key=lambda m: (m.name, m.price))
答案 1 :(得分:5)
您可以使用operator.attrgetter
from operator import attrgetter
m1 = Model(name='Lamborghini Miura', price=910)
m2 = Model(name='Ferrari 458 Italia', price=580)
lst = [m1, m2]
lst.sort(key=attrgetter('name', 'price'))
答案 2 :(得分:0)
您可以使用操作员模块:
from operator import attrgetter
model1 = Model('BMW Z4', 190)
model2 = Model('BMW X5', 220)
obj_list = [model1, model2)
sorted(obj_list, key=attrgetter('name', 'price'))
请参阅:https://wiki.python.org/moin/HowTo/Sorting/#Operator_Module_Functions