如何按列表中多个项目从高到低对列表进行排序?

2024-10-04 13:21:41 发布

您现在位置:Python中文网/ 问答频道 /正文

老实说,我真的很难解释我在做什么,因为我想不出能帮助我描述它的词语。不管怎样,问题是我想对列表进行排序:

[['a', [10, 6, 5]], ['b', [7, 4, 2]], ['c', [10, 6, 4]], ['d', [7, 3, 2]]]

这是我要排序的列表的一个例子。字符串是学生的名字,其中有三个整数的列表就是分数。我想用分数从高到低对这个列表进行排序,但是如果两个列表的第一个整数相同(例如:

^{pr2}$

然后它应该决定哪一个应该比下一个整数高。我试过许多不同的方法,但从我所尝试的来看,没有一种有效。我也很难找到答案,因为我不知道该如何解释我的问题,尽管我希望我上面所说的已经足够解释我的问题了。在

如果需要查看我的代码: MY CODE


Tags: 方法字符串答案代码列表排序my整数
3条回答
  • python内置的通过第三个关键字参数reverse排序的方法支持逆序排序。在
  • {2不支持通过指定第二个关键字}来解决问题,而不是通过指定第二个关键字}来解决
  • 最后一个问题是如何按照它出现的方式排列分数。这应该留给Python列表的自然排序。在

实施

>>> from operator import itemgetter
>>> sorted(seq, key = itemgetter(1), reverse = True)

输出 [['a',[10,6,5]],['c',[10,6,4]],['b',[7,4,2]],['d',[7,3,2]]]

您可以使用sorted函数的key参数,并按每个子列表的第二个元素排序。这将为每个子列表从元素0到元素N排序。并且reverse参数是这样您可以从最高到最低排序(而不是默认的从最低到最高)

>>> l = [['a', [10, 6, 5]], ['b', [7, 4, 2]], ['c', [10, 6, 4]], ['d', [7, 3, 2]]]
>>> sorted(l, key = lambda i: i[1], reverse=True)
[['a', [10, 6, 5]], ['c', [10, 6, 4]], ['b', [7, 4, 2]], ['d', [7, 3, 2]]]

您还可以将lambda替换为@ThiefMaster指出的键参数的lambda。在

您只需指定一个键函数,返回所需的所有键。在您的例子中,每个列表的第二个元素(例如[10, 6, 5])完成了这项工作,因为比较列表逐个元素地比较它们。在

from operator import itemgetter
sorted(whatever, key=itemgetter(1), reverse=True)

itemgetter(1)lambda x: x[1]相同,但性能更好(因为它是在Python的C代码中实现的,而不是在Python代码中实现的)。在

相关问题 更多 >