2

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

数千个列表中的每一个都包含 [name, gender, age],其中 name 和 gender 为 str,age 为 int。

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

我该怎么办?

4

2 回答 2

6

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

在您的情况下,您将希望返回内部列表中的第三项:

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]))
于 2013-10-10T17:03:39.600 回答
2
import operator
myBigList.sort(key=operator.itemgetter(2), reverse=True)
于 2013-10-10T17:11:29.040 回答