python - 按列表 Python 中的不同元素按数字降序然后按字母升序组织

标签 python list sorting

我有一个包含以下格式的三个元素的列表:

[('ABC', 'DEF', 2), ('GHI', 'JKL', 6), ('MNO', 'PQR', 22), ('ABC', 'STU', 2)...]

我想按数字对最后一个元素进行排序。然后按字母顺序排列第一个元素。如果有平局,最后是第二个元素。所以我的输出是:

[('MNO', 'PQR', 22), ('GHI', 'JKL', 6), ('ABC', 'DEF', 2), ('ABC', 'STU', 2)...]

我试过了

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

这仅按降序排列最后的元素。如何添加按字母顺序对第一个和第二个元素进行排序的工具。

最佳答案

返回一个元组,并对数字取反而不是使用reverse:

list_name.sort(key=lambda x: (-x[2],) + x[:2])

这将返回 (-item3, item1, item2) 并且排序首先按 降序 的整数 item3 顺序进行,当绑定(bind)数字排序在 item1 上完成(按字母顺序,升序),然后在 item2 上完成。

实际上,元组是按字典顺序排序的。

演示:

>>> list_name = [('ABC', 'DEF', 2), ('GHI', 'JKL', 6), ('MNO', 'PQR', 22), ('ABC', 'STU', 2)]
>>> list_name.sort(key=lambda x: (-x[2],) + x[:2])
>>> list_name
[('MNO', 'PQR', 22), ('GHI', 'JKL', 6), ('ABC', 'DEF', 2), ('ABC', 'STU', 2)]

关于python - 按列表 Python 中的不同元素按数字降序然后按字母升序组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22739971/

相关文章:

algorithm - 计数排序中为什么要存储count数组元素的累加和

python - 在Python中将xml元素解析为列表

python - 模板中的 Django 渲染模板

c++ - 给定一个未知长度的列表,通过仅扫描 1 次返回其中的随机项目

c - 读取文本文件,将每一行分成单独的数组并在 C 中排序

c++ - 应该使用插入排序还是构造堆来 boost 性能?

python - 使用 numpy.memmap 映射设备文件

python - 构建在 DynamoDB 之上的 RESTful API?

python - 将用户输入添加到列表的功能

r - 如何在 R 中进行集合乘法(笛卡尔积)