Skip to main content
 首页 » 编程设计

Python 等效于 MySQL "Left Join"两个元组列表

2025年05月04日17wuhuacong

这看起来很基础(尽管我确实有 MySQL 背景)。

a = [(1,f,e),(7,r,None),(2,s,f),(32,None,q)] 
b = [(32,dd), (1,pp)] 

如果我在 MySQL 中执行此操作(LEFT JOIN):

SELECT a.*, b.* FROM a LEFT JOIN b ON a[0] = b[0] 

我得到:

[(1,f,e,1,pp),(7,r,None,None,None),(2,s,f,None,None),(32,None,q,32,dd)] 

如何用 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) 
] 

由于我们正在遍历 a 以形成结果列表,并查找第二个列表的值,这将充当“LEFT JOIN”——返回左侧“表”中的所有项目"即使它们不在正确的“表格”中。