有没有办法在第一个键相等的情况下按第二个键排序?

时间:2014-08-26 02:37:43

标签: python sorting python-3.x

假设我有以下列表。

foo = [["A", 1], ["B", 2], ["C", 1]]

我想按列表中的第二个元素排序,所以我运行以下内容。

foo.sort(key=lambda i: i[1])

现在,foo有以下顺序。

[['A', 1], ['C', 1], ['B', 2]]

在列表中的第二个元素相等的情况下,有没有一种好方法可以按第一个元素排序?说我想要的顺序如下。

[['C', 1], ['A', 1], ['B', 2]]

2 个答案:

答案 0 :(得分:3)

只需将您的密钥设置为最后一个元素的元组即可。元组按您描述的方式自动排序(首先排序第一个元素,然后排序第二个,依此类推)。

foo.sort(key=lambda i: (i[1], i[0]))

请注意,如果您不希望原始列表按给定顺序排列,则可以直接对原始列表进行排序,如果您可以切换订单。如果您列出了foo = [[1, "A"], [2, "B"], [1, "C"]]列表,那么您可以foo.sort()进行查找。您可以通过执行foo = [reversed(i) for i in foo]将您的列表转换为该格式。

答案 1 :(得分:2)

只需将第二个索引添加到sort函数:

foo.sort(key=lambda i: (i[1], i[0]))