这似乎很基本(尽管我确实来自MySQL背景)。
a = [(1,f,e),(7,r,None),(2,s,f),(32,None,q)]
b = [(32,dd), (1,pp)]
Run Code Online (Sandbox Code Playgroud)
如果我在MySQL(LEFT JOIN)中这样做:
SELECT a.*, b.* FROM a LEFT JOIN b ON a[0] = b[0]
Run Code Online (Sandbox Code Playgroud)
我得到:
[(1,f,e,1,pp),(7,r,None,None,None),(2,s,f,None,None),(32,None,q,32,dd)]
Run Code Online (Sandbox Code Playgroud)
如何用Python做到这一点?
(也许我不是在搜索正确的词...但是我不想(想)我想追加,合并或合并...)
您可以通过在第二个输入列表之外制作字典然后查找来解决此问题:
>>> a = [(1,'f','e'),(7,'r',None),(2,'s','f'),(32,None,'q')]
>>> b = [(32,'dd'), (1,'pp')]
>>>
>>> b_dict = {item[0]: item for item in b}
>>> [item + b_dict.get(item[0], (None, None)) for item in a]
[
(32, None, 'q', 32, 'dd'),
(1, 'f', 'e', 1, 'pp'),
(2, 's', 'f', None, None),
(7, 'r', None, None, None)
]
Run Code Online (Sandbox Code Playgroud)
由于我们要遍历a
以形成结果列表,并查找第二个列表的值,因此这将充当“ LEFT JOIN”-从左侧“表”中返回所有项目,即使它们不在右侧“表”。