Python3:反向第一个元素的元组列表 - >如果是相同的,则按字母顺序排列第二个元素

时间:2016-05-11 00:10:03

标签: sorting python-3.x

我有一个这样的清单:

[(51, 'Elijah'), (144, 'Chloe'), (485, 'Elizabeth'), (485, 'Matthew'), (207, 'Natalie'), (390, 'Jayden')]

我想以相反的顺序对它进行排序,使用元组的第一个元素作为键。如果是相同的,我需要按字母顺序按第二个元素对其进行排序。我尝试使用sorted(lista,key = function),但我得到了各种错误。提前谢谢。

1 个答案:

答案 0 :(得分:1)

由于reversed选项是“全局”,而不是元组的每个元素,但是您的第一个元素是数字,您可以通过简单地否定它来反转数字排序方向:

>>> sorted(lista, key=lambda x: (-x[0], x[1]))
[(485, 'Elizabeth'), (485, 'Matthew'), (390, 'Jayden'), (207, 'Natalie'), (144, 'Chloe'), (51, 'Elijah')]

当元组列表被排序时,首先比较第一个元素,如果它与第二个元素相等,依此类推。因此,作为一个关键函数,您可以简单地创建一个(使用lambda),从原始元组创建一个元组,但反转第一个元素。