我有一个基本清单。
li = ['fca', 'fc_add', 'fca_2', 'fcadd_2', 'Red_Exis', 'G_Exis', 'P_Exis',
'fam_1']
并希望使用列表中项目的索引位置对以下元组列表进行排序。
tup= [('G_Exis','abc'), ('fca','210Y'), ('Red_Exis', 107),
('fc_add','999 Des ST.')]
我需要最终的排序列表如下所示:
fin_tup = [('fca','210Y'), ('fc_add','999 Des ST.'), ('Red_Exis', 107),
('G_Exis','abc')]
答案 0 :(得分:1)
index_dict = {item: index for index, item in enumerate(li)}
tup.sort(key=lambda t: index_dict[t[0]])
print(tup)
[('fca', '210Y'), ('fc_add', '999 Des ST.'), ('Red_Exis', 107),
('G_Exis', 'abc')]
或者没有排序:
index_dict = {item: index for index, item in enumerate(li)}
fin_tup = [None]*len(li)
for t in tup:
fin_tup[index_dict[t[0]]] = t
fin_tup = [t for t in fin_tup if t is not None]
答案 1 :(得分:0)
一种简单的方法是不对它进行实际排序,而是使用您要作为字典键排序的键的索引将其存储在字典中:
>>> d ={}
>>> for i in tup : d[li.index(i[0])] = i
>>> list(d.values())
[('fca', '210Y'), ('fc_add', '999 Des ST.'), ('Red_Exis', 107), ('G_Exis', 'abc')]
这是一种简单的方法,而不是有效方法。
答案 2 :(得分:0)
使用sort()的关键参数。排序的值是li中的索引,因此从每个值中取出第一个项目,并在li中找到索引。完成。
tup.sort(key=lambda item_in_li, trash: li.index(item_in_li))