我有一个很大的2D数组,其中第二个元素不是唯一的。像这样:
list = [ ['text43','value43'],
['text23','value23'],
['text12','value12'],
['text43','different_val_43'],
['text12','another_value12'],
['text04','value04'],
['text43','anohter_value43'] ]
我想按第一个元素排序,但不按字母顺序排序,仅按第一个元素的出现顺序排序。所需的输出:
list = [ ['text43','value43'],
['text43','different_val_43'],
['text43','anohter_value43'],
['text23','value23'],
['text12','value12'],
['text12','another_value12'],
['text04','value04'] ]
答案 0 :(得分:3)
您可以使用自定义sorting function,该自定义变量将返回首次找到子列表的第一个元素的索引,例如:
lst = [['text43','value43'],
['text23','value23'],
['text12','value12'],
['text43','different_val_43'],
['text12','another_value12'],
['text04','value04'],
['text43','anohter_value43']]
d = {}
for i, item in enumerate(lst):
if item[0] not in d:
d[item[0]] = i
lst.sort(key=lambda item: d[item[0]])
print(lst)
输出:
[['text43', 'value43'],
['text43', 'different_val_43'],
['text43', 'anohter_value43'],
['text23', 'value23'],
['text12', 'value12'],
['text12', 'another_value12'],
['text04', 'value04']]
答案 1 :(得分:0)
看看是否有帮助。使用sorted()
lst = [ ['text43','value43'],
['text23','value23'],
['text12','value12'],
['text43','different_val_43'],
['text12','another_value12'],
['text04','value04'],
['text43','anohter_value43'] ]
sorted(lst, reverse=True)
输出:
[['text43', 'value43'],
['text43', 'different_val_43'],
['text43', 'anohter_value43'],
['text23', 'value23'],
['text12', 'value12'],
['text12', 'another_value12'],
['text04', 'value04']]