是否有办法在第一个键相等时按第二个键排序?

4 投票
2 回答
2295 浏览
提问于 2025-04-18 18:31

假设我有以下这个列表。

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 个回答

2

只需要在排序函数中加上第二个索引就可以了:

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

只需要把你的关键字设置为最后一个元素和第一个元素组成的元组就可以了。元组会自动按照你描述的方式进行排序(先按第一个元素排序,再按第二个元素,依此类推)。

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] 将你的列表转换成那种格式。

撰写回答