我在一个列表中有数千个列表。
数千个列表中的每一个都包含[姓名,性别,年龄],其名称和性别为str,年龄为int。
我想按年龄按降序排序所有列表。
我该怎么做?
答案 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)