Python 如何按列表中的多个项目将列表从高到低排序?
老实说,我真的很难解释我想做什么,因为我想不出能帮助我描述它的词语。无论如何,问题是我想对列表进行排序:Python 如何按列表中的多个项目将列表从高到低排序?,python,list,sorting,Python,List,Sorting,老实说,我真的很难解释我想做什么,因为我想不出能帮助我描述它的词语。无论如何,问题是我想对列表进行排序: [['a', [10, 6, 5]], ['b', [7, 4, 2]], ['c', [10, 6, 4]], ['d', [7, 3, 2]]] 这是我试图排序的列表的一个示例。字符串是学生姓名,其中包含三个整数的列表是分数。我想使用分数将此列表从高到低排序,但如果两个列表的第一个整数相同(例如): 然后它应该决定哪一个应该比下一个整数高。我尝试过许多不同的方法,但从我尝试的结果来看,
[['a', [10, 6, 5]], ['b', [7, 4, 2]], ['c', [10, 6, 4]], ['d', [7, 3, 2]]]
这是我试图排序的列表的一个示例。字符串是学生姓名,其中包含三个整数的列表是分数。我想使用分数将此列表从高到低排序,但如果两个列表的第一个整数相同(例如):
然后它应该决定哪一个应该比下一个整数高。我尝试过许多不同的方法,但从我尝试的结果来看,没有一种有效。我也很难找到答案,因为我不知道如何确切地解释我的问题,尽管我希望我上面所说的已经对我的问题给出了足够的解释
如果您需要查看我的代码:
您可以使用
排序
函数的键
参数,并按每个子列表的第二个元素排序。这将为每个子列表从元素0到元素N排序。而reverse
参数是这样的,您可以从高到低排序(而不是默认的从低到高)
您还可以使用@ThiefMaster指出的键参数的
操作符.itemgetter(1)
替换lambda
。您只需指定一个键函数,返回所需的所有键。在您的情况下,每个列表的第二个元素(例如,[10,6,5]
)执行此任务,因为比较列表会逐个元素进行比较
from operator import itemgetter
sorted(whatever, key=itemgetter(1), reverse=True)
itemgetter(1)
与lambda x:x[1]
相同,但性能更高(因为它是在Python的C代码中实现的,而不是在Python代码中实现的)。- python内置的通过第三个关键字参数
排序的方法支持按相反顺序排序李>reverse
- 为了解决另一个问题,在中,数据是基于分数而不是名称排序的,这不是自然顺序,可以通过指定自定义键来解决,这是通过第二个关键字参数
key
- 最后一个问题是按照出现的方式排列分数。这应该留给Python列表的自然排序李>
>>> from operator import itemgetter
>>> sorted(seq, key = itemgetter(1), reverse = True)
输出
如果类文件是“1”你真的想在那里使用
=
<代码>is检查相同的对象。这不是您想要的。您是否按最高分数或总数排序,并且您的列表是否总是具有相同的长度?看起来您已经得到了一些很好的答案,但为了将来的参考,请在您的帮助请求中正确填写您的代码。这可以防止与代码的错误链接,也可以让下一个有相同问题的人使用,他们可能会在代码被删除后的某个时候偶然发现您的问题。
from operator import itemgetter
sorted(whatever, key=itemgetter(1), reverse=True)
>>> from operator import itemgetter
>>> sorted(seq, key = itemgetter(1), reverse = True)