【问题标题】:How to do a MYSQL INNER JOIN on two Python lists with the same elements?如何在具有相同元素的两个 Python 列表上执行 MYSQL INNER JOIN?
【发布时间】: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

标签: python mysql list 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】:

    list1list2 转换为字典可以轻松地做你想做的事:

    >>> 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']]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 2016-11-01
      • 2019-12-05
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多