如何在Python中匹配两个不同列表的第一个元素

如何在Python中匹配两个不同列表的第一个元素,python,python-3.x,Python,Python 3.x,我有两个类似的列表: list1[(0,123),(1,456)] list2[(0,'asd'),(2,'dsa'),(0,'eqw')] 我希望将以上两个列表合并到一个列表中,其中两个列表中的第一个元素是匹配的,例如,可以在列表2中找到列表1中的0,输出如下 list3[(0,123,'asd','eqw')] 我尝试了此代码,但似乎不起作用: out = [i for i,j in zip(list1, list2) if list1[0][0] == list[0][0]] 有人能

我有两个类似的列表:

list1[(0,123),(1,456)]
list2[(0,'asd'),(2,'dsa'),(0,'eqw')]
我希望将以上两个列表合并到一个列表中,其中两个列表中的第一个元素是匹配的,例如,可以在列表2中找到列表1中的0,输出如下

list3[(0,123,'asd','eqw')]
我尝试了此代码,但似乎不起作用:

out = [i for i,j in zip(list1, list2) if list1[0][0] == list[0][0]]
有人能给我一些解决办法吗?谢谢

您可以使用collections.defaultdict来执行以下操作:

>>> from collections import defaultdict
>>> list1 = [(0,123),(1,456)]
>>> list2 = [(0,'asd'),(2,'dsa'),(0,'eqw')]
>>> d = defaultdict(list)
>>> for k,v in list1+list2:
...     d[k].append(v)
... 
>>> d
defaultdict(<class 'list'>, {0: [123, 'asd', 'eqw'], 1: [456], 2: ['dsa']})
>>> d1, d2 = dict(list1), dict(list2)
>>> [(k,v) for k,v in d.items() if k in d1 and k in d2]
[(0, [123, 'asd', 'eqw'])]

你有充分的理由不使用字典吗?@Nils\M因为在列表2中有许多重复的元素重复?不在你的例子中。请让它更能代表您的需求。每个列表中的副本是否也应该合并?而不是列表3=[0123,'asd','eqw']?