首页 > 解决方案 > 如何按要求顺序对复杂列表进行排序?

问题描述

假设我有以下列表:

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']
            ]

谢谢,有什么想法吗?如果您认为需要更多说明,请发表评论。

标签: python

解决方案


用于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']]

推荐阅读