在python中使用条件对2D列表进行排序

在python中使用条件对2D列表进行排序,python,list,sorting,Python,List,Sorting,我有这样一个2d列表: [ [abc,5], [abd,21], [abb,10], [abc,3], [abb,15], [阿布德,20] ] 首先:我需要按字典顺序对列表进行排序(这相当简单) 第二:如果第一列中有多个相同的元素,则根据第二列(降序)对列表进行排序(仅相同的元素) 所以,我想要这样的结果: [ [abb,15], [abb,10], [abc,5], [abc,3], [abd,21], [阿布德,20] ] 这里详细描述了该方法:Python的排序函数是稳定的,这意味着如

我有这样一个2d列表:

[
[abc,5],
[abd,21],
[abb,10],
[abc,3],
[abb,15],
[阿布德,20]
]
首先:我需要按字典顺序对列表进行排序(这相当简单)

第二:如果第一列中有多个相同的元素,则根据第二列(降序)对列表进行排序(仅相同的元素)

所以,我想要这样的结果:

[
[abb,15],
[abb,10],
[abc,5],
[abc,3],
[abd,21],
[阿布德,20]
]

这里详细描述了该方法:

Python的排序函数是稳定的,这意味着如果两个元素的比较相等,它们的相对位置不会改变。元素之间比较不相等时才切换位置

此外,排序采用可选的
参数,该参数是一个确定排序应比较哪些值的函数。您可以为此定义一个完整的函数,但如果只使用一次,则通常会定义一个短lambda函数

将这些元素放在一起,您可以首先按第二个元素对列表进行排序,然后再按第一个元素对列表进行第二次排序。第一次排序的相对位置将在第二次排序后保持

a = [
    ['abc', 5],
    ['abd', 21],
    ['abb', 10],
    ['abc', 3],
    ['abb', 15],
    ['abd', 20]
]

# Sort by second element first, in descending order
a = sorted(a, key=lambda x: x[1], reverse=True)  

# Then sort by first element, in ascending order
a = sorted(a, key=lambda x: x[0])  

print(a)  # [['abb', 15], ['abb', 10], ['abc', 5], ['abc', 3], ['abd', 21], ['abd', 20]]