有没有一种方法可以对元组列表进行排序?

时间:2019-12-03 19:09:09

标签: python python-3.x list sorting tuples

我想对这个列表进行排序:

[('alpha', 2), ('delta', 3), ('charlie', 3), ('tango', 1), ('foxtrot', 1), ('echo', 2)]

结果应为

[('charlie', 3), ('delta', 3), ('alpha', 2), ('echo', 2), ('foxtrot', 1), ('tango', 1)]

charlie首先是因为它具有最大的数字,并且它在delta之前是因为c按字母顺序在d之前(因此,如果数字相同,则按字母顺序对那些特定的数字进行排序)。 alpha领先于echo,因为即使它们具有相同的数字,也按字母顺序位于e之前。回声在foxtrot的前面,因为回声的数目更大,而foxtrot在数目上相同,因为f在t之前,所以在探戈的前面。

目前,我的方法涉及for循环(查看每个元素)中的while循环(将项目移至正确的位置),然后再进行另一个循环,如果数字相同,则执行相同的操作,因此可以按字母顺序排序。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以编写自己的key传递给sorted。在这种情况下,请先按[1]索引进行排序,然后将其取反,以便获得降序排列。然后按名称升序按字母顺序排序,即索引[0]

>>> sorted(values, key=lambda i: (-i[1], i[0]))
[('charlie', 3), ('delta', 3), ('alpha', 2), ('echo', 2), ('foxtrot', 1), ('tango', 1)]