使用另一个列表中项的索引位置对元组列表进行排序

0 投票
3 回答
833 浏览
提问于 2025-04-17 14:31

我有一个基础列表。

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

3 个回答

0

使用sort()的key参数。排序的依据是li中的索引,所以从每个值中提取出第一个项目,然后找到它在li中的索引。就这样完成了。

tup.sort(key=lambda item_in_li, trash: li.index(item_in_li))
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]

或者不进行排序:

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

这是一种简单的方法,但不是最高效的。

撰写回答