反向排序列表

时间:2019-01-04 17:28:02

标签: python sorting

在python中,可以使用sorted(list)list.sort()对列表进行排序。这些功能支持按各个阶段(主要排序,次要排序等)进行排序。我知道可以通过向函数提供reversed=True来反转排序。

我的问题是:如何排序列表并逆转排序的单个阶段?

例如: 我有一个要排序的列表,其中包含存储对象的创建时间和名称的对象。现在,我想主要按时间(较高的值=更新)对它们进行排序,其次按名称(a-z)进行排序。

如果我执行sorted(list_of_objects, key=lambda x: (x.time, x.name)),则旧的(较低的时间值)将位于顶部,但字母排序将是正确的(a-z)。

如果我执行sorted(list_of_objects, key=lambda x: (x.time, x.name), reversed=True)来颠倒排序,则较新的元素(较高的时间值)在顶部,但字母排序也将颠倒(z-a)。

如前所述,我只想反转排序的一个阶段。在此示例中,是主要阶段。

怎么做(如果有的话)?

对于整数,可以从要达到的最大值中减去要排序的值,从而反转排序,但是这种技术不适用于其他数据类型,例如字符串。

1 个答案:

答案 0 :(得分:4)

Sort stability and complex sorts对此进行了介绍:

  

保证排序稳定[...]这个出色的属性使您可以通过一系列排序步骤来构建复杂的排序。例如,要将学生数据按年级降序然后按年龄升序排序,请先对年龄进行排序,然后再按年级进行排序

因此,您可以这样做

WebServiceTemplate webServiceTemplate = new WebServiceTemplate(marshaller);
ClientInterceptor[] interceptors = new ClientInterceptor[]{new SecurityInterceptor(parameters)};
webServiceTemplate.setInterceptors();
webServiceTemplate.marshalSendAndReceive(uriWebService, request)

(代码中的注释是从链接的Python文档中逐字记录的)