Python 如何按要求顺序对复杂列表进行排序?
假设我有以下列表:Python 如何按要求顺序对复杂列表进行排序?,python,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…
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。首先按键排序(数字第一(1000g是第一个),然后按字母顺序A、B、C排序),2。如果它们有相同的键,哪个先出现(例如,['CAD',2.741'],然后是['CAD',1.718'],即使值可能不是数字,它仍然需要遵循第二个要求)
我尝试使用list1.sort()
,但无法达到第二个要求,它总是首先返回较小的数字(值)
排序后的列表1应如下所示:
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']]
['AC',1']
怎么能排在第一位呢。它应该是['AC',6']
右一?不,因为['AC',1']在['AC',6']前面。所以['AC','1']排在第一位,同样地,['CAD','2.741']排在第一位,因为['CAD','2.741']在['CAD','1.718']前面,我的答案怎么了?