根据另一个列表对元组列表进行排序

Pra*_*jal 2 python

我有一个元组列表,例如。

l1 = [(1, 'a', 'x'), (2, 'b', 'y'), (3, 'a', 'z'), (4, 'c', 'xyz')]
Run Code Online (Sandbox Code Playgroud)

我还有另一个清单

l2 = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

我想l1根据 中存在的顺序对每个元组的第二个值进行排序l2。最终结果应该是

l1 = [(1, 'a', 'x'), (3, 'a', 'z'), (2, 'b', 'y'), (4, 'c', 'xyz')]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,第二个值为 的元组a首先出现,然后是具有第二个值的元组b,最后是具有 的元组c

我写了以下内容:

l = []
for i in l2:
    for j in l1:
        if i == j(1):
        l.append(j)
Run Code Online (Sandbox Code Playgroud)

这非常简单。但我想知道是否有任何 pythonic 方法来完成这件事?

sch*_*ggl 5

您可以使用sorted适当的key函数:

l1 = [(1, 'a', 'x'), (2, 'b', 'y'), (3, 'a', 'z'), (4, 'c', 'xyz')]
l2 = ['a', 'b', 'c']
d2 = {v: i for i, v in enumerate(l2)}  # map elements to indexes
# {'a': 0, 'b': 1, 'c': 2}

sorted(l1, key=lambda x: d2[x[1]])
# [(1, 'a', 'x'), (3, 'a', 'z'), (2, 'b', 'y'), (4, 'c', 'xyz')]
Run Code Online (Sandbox Code Playgroud)