如何按组排序?

2024-09-27 20:18:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一门课:

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

以此类推。。我需要按两种方式对这个数组进行排序:首先,按品牌(因此,宝马的产品排在第一位),然后按价格排序,而不删除前面的影响。你知道吗

问题是,如果我按sort()属性排序,然后按price排序,第一个排序效果将丢失。我该怎么办?你知道吗


Tags: 实例namenonemodel排序数组priceclass
3条回答

可以使用^{}对对象列表进行排序

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'))

您可以使用操作员模块:

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

所有sort函数都采用可选的kwarg key。它可以与元组以这种方式自然排序的事实结合使用,以构建一个匿名lambda函数,如下所示:

lst = [Model(name='BMW 4-series',price=90), ... ]
lst.sort(key=lambda m: (m.name, m.price))

相关问题 更多 >

    热门问题