我在一个列表中有数千个列表。
数千个列表中的每一个都包含 [name, gender, age],name 和 gender 是一个 str,age 是一个 int。
我想按年龄降序对所有列表进行排序。
我该怎么做?
最佳答案
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 岁 super 安全——所以您可以按 1000-age
进行升序排序,以按 age
进行降序排序:
biglist.sort(key=lambda x: (1000 - x[2], x[0]))
关于python - 在列表中排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19301786/