如何使用相同的元素在两个Python列表上进行MYSQL内部连接?
我有两个python3数组(列表),类似于MYSQL中的两列。它们的一些第一个“列”元素是相同的:如何使用相同的元素在两个Python列表上进行MYSQL内部连接?,python,mysql,list,inner-join,Python,Mysql,List,Inner Join,我有两个python3数组(列表),类似于MYSQL中的两列。它们的一些第一个“列”元素是相同的: list1 = [ ['a', 'apple'], ['b', 'banana'], ['m', 'mango'] ] list2 = [ ['b', 'buffalo'], ['zzzz', 'zzzzegemot, a sleeping behemoth'], ['m', 'mongoose'] ] 请注意,在这两个列表中,第一个“b”和第三个“m”元素是相同的 如何在
list1 = [
['a', 'apple'],
['b', 'banana'],
['m', 'mango']
]
list2 = [
['b', 'buffalo'],
['zzzz', 'zzzzegemot, a sleeping behemoth'],
['m', 'mongoose']
]
请注意,在这两个列表中,第一个“b”和第三个“m”元素是相同的
如何在list1[0]和list2[0]上执行类似于MYSQL内部联接的操作,并获得第三个,即列中类似项的组合:
list3 = [
['banana', 'buffalo']
['mango', 'mongoose']
]
我希望我清楚地表达了自己的意思,以便您能理解我。将
list1
,list2
转换为字典可以让您更轻松地完成自己的任务:
>>> list1 = [
... ['a', 'apple'],
... ['b', 'banana'],
... ['m', 'mango']
... ]
>>>
>>> list2 = [
... ['b', 'buffalo'],
... ['zzzz', 'zzzzegemot, a sleeping behemoth'],
... ['m', 'mongoose']
... ]
>>>
>>> d1, d2 = dict(list1), dict(list2)
>>> common_keys = set(d1) & set(d2) # => {'b', 'm'} keys that appears in both dicts.
>>> [[d1[k], d2[k]] for k in common_keys]
[['banana', 'buffalo'], ['mango', 'mongoose']]
由于您有两个列表,内部联接应该负责重复键
m1 = reduce(lambda c,x: c[x[0]].append(x[1]) or c,list1,defaultdict(list))
list(chain(*(product(m1[e[0]],[e[1]]) for e in list2)))
# added entries ['b', 'bongo'] and ['b', 'bull'] into list1 and list2
>>> [('banana', 'buffalo'),
('bongo', 'buffalo'),
('banana', 'bull'),
('bongo', 'bull'),
('mango', 'mongoose')]
MySQL不独占
内部联接
。您很可能指的是SQL内部联接
。