对列表中的列表进行排序

时间:2013-10-10 16:56:35

标签: python python-3.x

我在一个列表中有数千个列表。

数千个列表中的每一个都包含[姓名,性别,年龄],其名称和性别为str,年龄为int。

我想按年龄按降序排序所有列表。

我该怎么做?

2 个答案:

答案 0 :(得分:6)

list.sort允许您指定,它基本上是在对列表进行排序时用于列表中每个项目的内容。该键是一个以项目为参数的函数。默认情况下,它是标识,因此它始终返回原始对象,但您可以通过指定其他函数轻松更改它。

在您的情况下,您将要返回内部列表中的第3项:

biglist.sort(key=lambda x: x[2])

请注意,当年龄不是唯一时(通常不是),这不会指定良好的顺序。因此,您可能希望指定第二个订单,例如使用名称:

biglist.sort(key=lambda x: (x[2], x[0]))

要获得降序,您必须在排序调用中进一步设置reverse=True

biglist.sort(key=lambda x: (x[2], x[0]), reverse=True)

请注意,这样做也会影响名称的顺序,因此您将获得一个降序年龄名称。如果你不想那样,你可以对列表进行两次排序(单独排序;先命名,然后逐渐降序),或者你可以稍微欺骗一下:你可以假设没有活着的人会超过200岁或者说1000岁为了超级安全 - 所以你可以按1000-age升序进行排序,以便在age上进行降序排序:

biglist.sort(key=lambda x: (1000 - x[2], x[0]))

答案 1 :(得分:1)

import operator
myBigList.sort(key=operator.itemgetter(2), reverse=True)