python - 在列表中排序列表

标签 python python-3.x

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

数千个列表中的每一个都包含 [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/

相关文章:

python - Django - 使用电子邮件或用户名登录不起作用

python - 是否有 JavaScript 的 module.exports 的 Python 模拟?

python - 随时间传播卫星目录的有效方法

python - 如何在 Kivy 中更改小部件颜色

python - 如何按值从集合中删除对象

python - 根据部分字符串在列表中查找条目

python - pyparsing 优化跳过其余行

Python 3.2 与 Tkinter 与网络浏览器 - 搜索程序

Python Flask 解析输出中的 JSON 内容

python-3.x - python : Is it possible to do the same using reduce()?