【问题标题】:Python3: sort of a list of tuples by first element in reverse -> if that is the same, by second element in alphabetic orderPython3:按第一个元素反向排序元组列表->如果相同,则按字母顺序的第二个元素
【发布时间】:2016-05-11 08:16:30
【问题描述】:

我有一个这样的列表:

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

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

【问题讨论】:

  • 我得到'TypeError:sort_score()缺少1个必需的位置参数:'。我尝试使用带有两个参数的排序函数,这样我就可以比较什么了。

标签: sorting python-3.x


【解决方案1】:

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

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

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

【讨论】:

  • 哇。它真的奏效了。谢谢你。我一直在寻找具有服装分类功能的复杂答案。但我想我会在其他时间学习如何做到这一点。
  • 这确实使用了自定义排序功能,我只是使用了一个lambda表达式来编写它。您可以在调用 sorted 之外定义该函数,然后完成 key=myfun 或类似的事情。 lambda x: (-x[0], x[1]) 等价于函数def myfun(x): return (-x[0], x[1])
猜你喜欢
  • 1970-01-01
  • 2022-08-18
  • 2022-02-12
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多