Python 按第一个元素对元素列表进行排序,如果相等,则按第二个元素进行排序

Python 按第一个元素对元素列表进行排序,如果相等,则按第二个元素进行排序,python,Python,我构建了一个列表[[13,“b”],[10,“b”],[10,“a”,],[4,“c”],[1,“d”],该列表按两个元素列表中的第一个值排序。这是我能做的部分。我不知道的是,如果两个元素是相同的,那么我想按字母顺序排序。我用来对第一个列表排序的方法是按第一个元素反转已排序的列表。然而,这使得[10,“b”]位于[10,“a”]之前,但我希望在“b”之前加上“a”。有没有一种方法可以按第一个元素降序排序,如果是并列的,则按第二个元素的字母顺序排序 这是有效的: >>> li=[

我构建了一个列表
[[13,“b”],[10,“b”],[10,“a”,],[4,“c”],[1,“d”]
,该列表按两个元素列表中的第一个值排序。这是我能做的部分。我不知道的是,如果两个元素是相同的,那么我想按字母顺序排序。我用来对第一个列表排序的方法是按第一个元素反转已排序的列表。然而,这使得
[10,“b”]
位于
[10,“a”]
之前,但我希望在“b”之前加上“a”。有没有一种方法可以按第一个元素降序排序,如果是并列的,则按第二个元素的字母顺序排序

这是有效的:

>>> li=[[13, "b"], [10, "b"], [10, "a",], [4,"c"], [1, "d"]]
>>> sorted(li,key=lambda sl: (-sl[0],sl[1]))
[[13, 'b'], [10, 'a'], [10, 'b'], [4, 'c'], [1, 'd']]
将生成一个新列表。您还可以使用排序方法对列表进行就地排序:

>>> li=[[13, "b"], [10, "b"], [10, "a",], [4,"c"], [1, "d"]]
>>> li.sort(key=lambda sl: (-sl[0],sl[1]))
>>> li
[[13, 'b'], [10, 'a'], [10, 'b'], [4, 'c'], [1, 'd']]
您还可以进行嵌套排序(或在一个键上排序,然后在第二个键上排序),因为python使用:

因为在单元素排序中不需要lambda,所以我使用了更快的lambda。我不知道两个快的排序是否比一个快。。。也可以将lambda用于此方法

有一个很好的例子展示了许多这样的习惯用法。

+1用于更快的键入:)这是我的
排序(l,key=lambda x:(-x[0],x[1])
可能重复的
>>> from operator import itemgetter
>>> li=[[13, "b"], [10, "b"], [10, "a",], [4,"c"], [1, "d"]]
>>> li.sort(key=itemgetter(1))
>>> li
[[10, 'a'], [13, 'b'], [10, 'b'], [4, 'c'], [1, 'd']]
>>> li.sort(key=itemgetter(0),reverse=True)
>>> li
[[13, 'b'], [10, 'a'], [10, 'b'], [4, 'c'], [1, 'd']]