Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按组排序?_Python_Sorting_Python 3.x - Fatal编程技术网

Python 如何按组排序?

Python 如何按组排序?,python,sorting,python-3.x,Python,Sorting,Python 3.x,我有这门课: class Model: name = None price = None 和模型实例的普通数组,如下所示: name ; price BMW 4-series ; 90 BMW Z4 ; 190 BMW X5 ; 220 Lamborghini Miura ; 910 Ferrari 458 Italia ; 580 Ferrari California T ; 530 等等。。我需要以两种方式对这个数组进行排序:首先,按品牌,所以,宝马的项目首先出现,然后按

我有这门课:

class Model:
    name = None
    price = None
和模型实例的普通数组,如下所示:

name ; price
BMW 4-series ; 90
BMW Z4 ; 190
BMW X5 ; 220
Lamborghini Miura ; 910
Ferrari 458 Italia ; 580
Ferrari California T ; 530
等等。。我需要以两种方式对这个数组进行排序:首先,按品牌,所以,宝马的项目首先出现,然后按价格出现,而不删除之前的影响

问题是,若按名称属性排序,然后按价格排序,那个么第一个排序效果将丢失。我该怎么办?

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

lst = [Model(name='BMW 4-series',price=90), ... ]
lst.sort(key=lambda m: (m.name, m.price))
所有排序函数都采用可选的kwarg键。它可以与元组自然排序的事实结合使用,以构建匿名lambda函数,如下所示:

lst = [Model(name='BMW 4-series',price=90), ... ]
lst.sort(key=lambda m: (m.name, m.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'))

请参阅:

您可以使用操作员模块:

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

请参阅:

我实际上不知道您可以为。。。getters@AdamSmith对另外,我认为attrgetter有点快。它当然更快。我实际上不知道您可以为。。。getters@AdamSmith对另外,我认为attrgetter有点快。它当然更快。