如何根据另一个列表的项目顺序对元组列表进行排序

时间:2021-06-14 22:39:57

标签: python list tuples

我有一个列表:l = ['orange', 'banana', 'apple', 'pear']

我还有一个元组列表,在每个元组中,第一项与先前列表中的值匹配:list_tuples = [('pear',value),('apple',value),('orange',value),('banana',value)]

有没有办法根据列表 list_tuples 的顺序对 l 中的元组重新排序?那么 list_tuples 的预期输出将是 [('orange',value),('banana',value),('apple',value),('pear',value)]

2 个答案:

答案 0 :(得分:1)

您可以为 sorted 编写一个自定义的 key-function,它会考虑列表中的索引(位置):

>>> l = ["orange", "banana", "apple", "pear"]
>>> list_tuples = [("pear","value"),("apple","value"),("orange","value"),("banana","value")]
>>> sorted(list_tuples, key=lambda x: l.index(x[0]))
[('orange', 'value'), ('banana', 'value'), ('apple', 'value'), ('pear', 'value')]

答案 1 :(得分:0)

您可以使用 for 循环。但出于性能原因,我建议使用 .sort 函数。它还使您的代码看起来很干净。

无论如何,这是一个可以做你想做的代码。 我使用自定义键访问第一个列表中元素的索引,然后使用它对第二个列表进行排序。请注意,这仅在第一个列表中没有重复项时才有效。如果有,那么你应该使用 for 循环。

first_list = ['orange', 'banana', 'apple', 'pear']

value = 0 # value doesn't matter here.

def custom_sort(element):
    return first_list.index(element[0])

second_list = [('pear',value),('apple',value),('orange',value),('banana',value)]

second_list.sort(key=custom_sort)

print(second_list)
相关问题