根据另一个自制订单在列表中排序元组

时间:2014-07-24 03:55:47

标签: python list tuples

我无法根据我编写的顺序对列表中的元组进行排序,在列表中表示。下面是我列表中的元组

list_tup = [('NYC','SF'), ('HOU','BOS'), ('NYC','DAL')]

这是我想要的从头到尾的元素顺序。我把它们放在一个清单中。

sls = ['SF','DAL','NYC','HOU', 'BOS']

我尝试了一些基本的东西:

sorted(list_tup, key = sls)

但由于列表对象不可调用,因此无效。可以这样做吗?

我想要的输出是:

output = [('SF','NYC'),('HOU','BOS'),('DAL','NYC')]

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

list_tup = [('NYC', 'SF'), ('HOU', 'BOS'), ('NYC', 'DAL')]
sls = ['SF', 'DAL', 'NYC', 'HOU', 'BOS']

# Convert `sls` to a dictionary with the index as the value
sls_d = {item:idx for idx, item in enumerate(sls)}

# Sort individual tuples based on the index from `sls_d`
print [tuple(sorted(items, key=sls_d.get)) for items in list_tup]
# [('SF', 'NYC'), ('HOU', 'BOS'), ('DAL', 'NYC')]

如果您不担心性能,可以使用sls列表中元素的索引进行排序,(索引查找将是线性搜索)

print [tuple(sorted(items, key=sls.index)) for items in list_tup]
# [('SF', 'NYC'), ('HOU', 'BOS'), ('DAL', 'NYC')]