我如何按群组排序?

时间:2015-04-07 06:59:46

标签: python sorting python-3.x

我有这堂课:

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排序,则第一次排序效果将会丢失。我该怎么办?

3 个答案:

答案 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