Python - 排序列表

Python - Sorting Lists

我正在尝试使用此代码按多个条件对列表进行排序。

lis = sorted([lsDataSorted[i:i+8] for i in range(0,len(lsDataSorted),8)],key=lambda x:(x[7],int(x[5])-int(x[6]),x[5],x[0]),reverse=True)

现在,我们不必费心谈论每个对象是什么,但我们看到我有一个 "reverse" 排序功能。现在,我的最后一个条件 x[0] 恰好是一个名称列表。通过使用 reverse=True,我们知道排序将以相反的顺序 (z-a)。我的问题是,我可以 "reverse" 仅针对最后一种情况恢复正常吗?如果是,那又如何?

我建议将 lsDataSorted 的每个块包装到一个自定义 class 中,这将根据您的复杂条件强制进行比较。例如:

import functools

@functools.total_ordering
class Compare(object):
    def __init__(self, chunk):
        self.x = chunk[7], int(chunk[5]) - int(chunk[6]), chunk[5]
        self.y = chunk[0]
    def __eq__(self, other):
        return (self.x==other.x) and (self.y==other.y)
    def __lt__(self, other):
        if self.x != other.x:
            return self.x < other.x
        return self.y > other.y

现在,

lis = sorted([lsDataSorted[i:i+8]
              for i in range(0,len(lsDataSorted),8)],
              key=Compare, reverse=True)

应该会为您提供您显然正在寻找的混合复杂排序。