如何按列表中的多个项目将列表从最高到最低排序?

时间:2015-04-27 17:06:57

标签: python list sorting

老实说,我很难解释我想要做什么,因为我无法想出能够帮助我描述它的词语。无论如何,问题是我想对列表进行排序:

let!(:flight_0) {}

这是我尝试排序的列表的示例。字符串是瞳孔名称,其中包含三个整数的列表是分数。我想使用分数将此列表从最高到最低排序,但我想对它进行排序,如果两个列表具有相同的第一个整数(E.G):

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

那么它应该决定下一个整数应该更高一个。我尝试了很多不同的方法,但是从我尝试过的方法来看,它们都没有用。我也很难找到答案,因为我不知道如何解释我的问题,虽然我希望我上面所说的已经给我的问题提供了足够的解释。

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

3 个答案:

答案 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内置支持以相反顺序排序。
  • 要解决另一个问题,其中,数据是根据得分而不是名称进行排序,而不是当时的自然顺序,可以通过指定自定义键来解决,通过第二个关键字参数{ {1}}
  • 最后一个问题是按照出现的方式对分数进行排序。这应该留给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]]]