python - 如何按要求顺序对复杂列表进行排序?
问题描述
假设我有以下列表:
list1 = [
['AC', '1'], ['AF', '0.167'], ['AN', '6'],['CAD', '2.741'], ['Bas', '-2.542'],
['CAD', '1.718'], ['AC', '6'],['AN', '6'],['1000g', '0.9998']
]
在此列表中,它将子列表中的第一个元素视为键(例如,AC、AF...),将子列表中的第二个元素视为值(例如,1,0.167...)
一些子列表完全相同(例如,['AN','6']),其中一些具有相同的键(例如,AC)或相同的值。
我想将此列表排序为要求,1。先按key排序(数字优先(1000g是第一个),然后按字母顺序排序,A,B,C),2.如果他们有相同的key,哪个先出现的先出现(例如,['CAD',' 2.741'] 然后 ['CAD', '1.718'],即使值可能不是数字,它仍然需要遵循第二个要求)
我尝试使用list1.sort()
,但无法达到第二个要求,它总是先返回较小的数字(值)
排序后的 list1 应该是这样的:
list1_sorted = [
['1000g', '0.9998'], ['AC', '1'], ['AC', '6'], ['AF', '0.167'],
['AN', '6'],['AN', '6'],['Bas', '-2.542'], ['CAD', '2.741'], ['CAD', '1.718']
]
谢谢,有什么想法吗?如果您认为需要更多说明,请发表评论。
解决方案
用于list.index
对它们进行排序:
list1 = [
['AC', '1'], ['AF', '0.167'], ['AN', '6'], ['CAD', '2.741'], ['Bas', '-2.542'],
['CAD', '1.718'], ['AC', '6'], ['AN', '6'], ['1000g', '0.9998']
]
print(sorted(list1, key=lambda x: (x[0], list1.index(x))))
# [['1000g', '0.9998'], ['AC', '1'], ['AC', '6'], ['AF', '0.167'], ['AN', '6'], ['AN', '6'], ['Bas', '-2.542'], ['CAD', '2.741'], ['CAD', '1.718']]
推荐阅读
- python - 在元音+周围辅音处拆分字符串
- javascript - 如何通过他们的 ID 和给出的消息到达不和谐中的机器人 dms 一个人的位置
- ruby-on-rails - 使用 Rails.cache 时 Rspec 测试失败,但如果我执行 binding.pry 则通过
- python - __init__() 缺少 1 个必需的位置参数 'master'
- javascript - 更改 SpeechSynthesis 语音不起作用
- python - 在 OpenCV 和 Python 中控制视频流的对比度和亮度
- c - 无法找出如何在 AVL 树中释放()已删除的节点
- xml - XSL 删除空子节点,但如果没有子节点,则创建一个
- javascript - 每当我单击列表项时,如何打开和关闭课程?
- c - 关于使用 c 进行数组操作的 Hackerrank 问题