我有两个这样的列表:
list1[(0,123),(1,456)]
list2[(0,'asd'),(2,'dsa'),(0,'eqw')]
我希望将两个列表中的两个列表合并到一个列表中,其中两个列表中的第一个元素匹配,例如,0
中的list1
可以在list2
中找到,输出应该像< / p>
list3[(0,123,'asd','eqw')]
我试过这段代码,但似乎行不通:
out = [i for i,j in zip(list1, list2) if list1[0][0] == list[0][0]]
有人能给我任何解决方案吗?谢谢!
答案 0 :(得分:1)
您可以使用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'])]