作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含以下格式的三个元素的列表:
[('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/
我是一名优秀的程序员,十分优秀!