如果第一个键相等,有没有办法按第二个键排序?

Ayr*_*yrx 4 python sorting python-3.x

假设我有以下列表。

foo = [["A", 1], ["B", 2], ["C", 1]]
Run Code Online (Sandbox Code Playgroud)

我想按列表中的第二个元素排序,因此我运行以下命令。

foo.sort(key=lambda i: i[1])
Run Code Online (Sandbox Code Playgroud)

现在, foo 有以下顺序。

[['A', 1], ['C', 1], ['B', 2]]
Run Code Online (Sandbox Code Playgroud)

如果列表中的第二个元素相等,是否有一个好方法按第一个元素排序?说我想要的顺序如下。

[['C', 1], ['A', 1], ['B', 2]]
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 5

只需将键设置为最后一个元素的元组,然后是第一个元素。元组会按照您描述的方式自动排序(首先对第一个元素进行排序,然后对第二个元素进行排序,依此类推)。

foo.sort(key=lambda i: (i[1], i[0]))
Run Code Online (Sandbox Code Playgroud)

请注意,如果您并不绝对需要原始列表按给定的顺序排列,则可以直接对原始列表进行排序(如果您可以切换顺序)。如果您列出了清单,foo = [[1, "A"], [2, "B"], [1, "C"]]那么您就可以这样做foo.sort(),仅此而已。您可以通过执行以下操作将列表转换为该格式foo = [reversed(i) for i in foo]