Python相当于MySQL的“ Left Join”两个元组列表

Tre*_*est 1 python left-join

这似乎很基本(尽管我确实来自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做到这一点?

(也许我不是在搜索正确的词...但是我不想(想)我想追加,合并或合并...)

ale*_*cxe 6

您可以通过在第二个输入列表之外制作字典然后查找来解决此问题:

>>> 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”-从左侧“表”中返回所有项目,即使它们不在右侧“表”。