python - 两个字典列表的交集?

标签 python dictionary

类似于this问题,我想知道两个字典列表之间的交集。

其他问题询问如何获取列表内字典的交集:

>>> dicts = [dict(a=3, b=89, d=2), dict(a=3, b=89, c=99), dict(a=3, b=42, c=33)]

解决方案是:

dict(set.intersection(*(set(d.iteritems()) for d in dicts)))

但是我想知道如何获取两个字典列表的交集,并且获取内部字典的交集。

如果我有:

>>> dicts1 = [dict(a=3, b=89, d=2), dict(a=3, b=89, c=99), dict(a=3, b=42, c=33)]
>>> dicts2 = [dict(a=3, b=89, d=2), dict(a=1, b=89, c=99), dict(a=0, b=42, c=33)]

我要

{a=3m, b=89, b=42}

打印不是因为它发生在 dicts1 中的所有字典中,而是因为它发生在 dicts1 中的字典和 dict2 中的字典中。我不在乎每个数组中的位置。只是它发生了。

最佳答案

像这样的怎么样(请注意,如果您有固定的键列表,则不需要第一行):

keys = set([y for x in dicts1 for y in x.keys() ] + [y for x in dicts2 for y in x.keys() ])

for key in keys:
    valsDicts1 = set([x[key] for x in dicts1 if key in x])
    valsDicts2 = set([x[key] for x in dicts2 if key in x])
    print key, list(valsDicts1 & valsDicts2)

使用您的示例打印:

a [3]
c [33, 99]
b [89, 42]
d [2]

显然,如果您不想打印它,请对最后一行执行其他操作。

关于python - 两个字典列表的交集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17751392/

相关文章:

Swift JSON to Dictionary<String : Any>. Then cast "Any"as NSMutableArray

python - ssl.SSLCertVerificationError : [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl. c:997)

python - 如何在 Django 查询中混合 AND 和 OR 运算符?

python - pyspark reduce 方法的歧义

python - 跨文件 Python 更改变量

java - 在 Java 中将 A 类(和所有子类)映射到 B 类的实例

python - 如何在字典中使用for循环

Python:获取字典键作为按子字典值排序的列表

python - 用 C++ 加速 Python

http - 将 HTTP JSON 正文响应转换为 Go 中的映射