【问题标题】:Is there a way to sort by a second key in the event that the first key is equal?如果第一个键相等,有没有办法按第二个键排序?
【发布时间】:2014-08-26 02:37:43
【问题描述】:

假设我有以下列表。

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]]

【问题讨论】:

标签: python sorting python-3.x


【解决方案1】:

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

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] 将您的列表转换为该格式。

【讨论】:

  • 有趣啊!我没有意识到这是可能的。很快就会接受这个答案。 :)
【解决方案2】:

只需将第二个索引添加到排序功能:

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

【讨论】:

  • 感谢您的回答!但看起来布伦首先回答了,所以我会接受他的。无论如何都赞成。 :)
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
相关资源
最近更新 更多