假设我有一个列表:
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(),但没有达到第二个要求,它总是首先返回较小的数字(值)
排序后的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']
]谢谢,有什么好主意吗?如果你认为你需要更多的澄清,只需要评论。
发布于 2020-11-16 00:35:33
使用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']]https://stackoverflow.com/questions/64846867
复制相似问题