如何在具有相同元素的两个 Python 列表上执行 MYSQL INNER JOIN?
Posted
技术标签:
【中文标题】如何在具有相同元素的两个 Python 列表上执行 MYSQL INNER JOIN?【英文标题】:How to do a MYSQL INNER JOIN on two Python lists with the same elements? 【发布时间】:2016-07-05 08:00:50 【问题描述】:我有两个 python3 数组(列表),类似于 mysql 中的两列。他们的一些第一个“列”元素是相同的:
list1 = [
['a', 'apple'],
['b', 'banana'],
['m', 'mango']
]
list2 = [
['b', 'buffalo'],
['zzzz', 'zzzzegemot, a sleeping behemoth'],
['m', 'mongoose']
]
请注意,在两个列表中,第一个 'b' 和第三个 'm' 元素是相同的。
如何在 list1[0] 和 list2[0] 上执行类似于 MYSQL INNER JOIN 的操作并获得第三个,即列中相似条目的组合:
list3 = [
['banana', 'buffalo']
['mango', 'mongoose']
]
我希望我表达清楚,让你理解我。
【问题讨论】:
MySQL 并不独占INNER JOIN
。您很可能是指 SQL INNER JOIN
。
【参考方案1】:
由于您有两个列表,因此内部联接应该负责重复键。
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')]
【讨论】:
【参考方案2】:将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']]
【讨论】:
以上是关于如何在具有相同元素的两个 Python 列表上执行 MYSQL INNER JOIN?的主要内容,如果未能解决你的问题,请参考以下文章
如何断言两个列表包含 NUnit 中具有相同公共属性的元素?