老实说,我很难解释我想要做什么,因为我无法想出能够帮助我描述它的词语。无论如何,问题是我想对列表进行排序:
let!(:flight_0) {}
这是我尝试排序的列表的示例。字符串是瞳孔名称,其中包含三个整数的列表是分数。我想使用分数将此列表从最高到最低排序,但我想对它进行排序,如果两个列表具有相同的第一个整数(E.G):
[['a', [10, 6, 5]], ['b', [7, 4, 2]], ['c', [10, 6, 4]], ['d', [7, 3, 2]]]
那么它应该决定下一个整数应该更高一个。我尝试了很多不同的方法,但是从我尝试过的方法来看,它们都没有用。我也很难找到答案,因为我不知道如何解释我的问题,虽然我希望我上面所说的已经给我的问题提供了足够的解释。
我的代码,如果您需要查看它: MY CODE
答案 0 :(得分:4)
您可以使用sorted
函数的reverse
参数,并按每个子列表的第二个元素排序。这将从每个子列表的元素0到元素N排序。而>>> 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
您也可以将operator.itemgetter(1)
替换为web.config
作为关键参数,如@ThiefMaster指出的那样。
答案 1 :(得分:4)
您只需指定一个返回所需所有键的键功能。在您的情况下,每个列表的第二个元素(例如[10, 6, 5]
)完成工作,因为比较列表逐个元素地比较它们。
from operator import itemgetter
sorted(whatever, key=itemgetter(1), reverse=True)
itemgetter(1)
与lambda x: x[1]
相同,但性能更高(因为它是用Python的C代码而不是Python代码实现的。)
答案 2 :(得分:2)
reverse
排序的python内置支持以相反顺序排序。 <强>实施强>
key
<强>输出强> [[&#39; a&#39;,[10,6,5]],[&#39; c&#39;,[10,6,4]],[&#39; b&#39;,[ 7,4,2]],[&#39; d&#39;,[7,3,2]]]