我有一个像这样的二维列表:[
[abc, 5],
[abd, 21],
[abb, 10],
[abc, 3],
[abb, 15],
[abd, 20]
]首先:我需要按字典顺序对列表进行排序(这很简单)第二:如果第一列有多个相同的元素,则按照第二列(降序)对列表(只有相同的元素)进行排序。所以,我想要这样的结果:[
[abb, 15],
[abb, 10],
[abc, 5],
[abc, 3],
[abd, 21],
[abd, 20]
]
2 回答

回首忆惘然
TA贡献1847条经验 获得超11个赞
Python 的排序函数是稳定的,这意味着如果两个元素比较相等,它们的相对位置不会改变。元素只有在比较不相等时才会切换位置。
此外,排序需要一个可选key参数,该参数是一个确定排序应该比较哪些值的函数。您可以为此定义一个完整的函数,但如果您只打算使用一次,则通常定义一个简短的 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]]
添加回答
举报
0/150
提交
取消