我有一个元组列表,例如。
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 方法来完成这件事?
您可以使用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)
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |