python - 找到字典键的交集并将它们组合起来

标签 python list function dictionary intersection

所以我遇到了一个问题。 我有这个函数,我得到一个包含字典作为输入的列表,输出应该是一个新的字典,其中的键都在输入字典中,并且作为值包含键所具有的所有值的列表。

EG

d1 = {1: 10, 2: 20, 3: 30, 4: 40, 5: 50}

d2 = {1: 20, 3: 60, 5: 100}

d3 = {1: 10, 7: 70, 5: 55}

print find_intersection([d1, d2, d3])
# prints {1: [10, 10, 20], 5: [50, 55, 100]}

最佳答案

如果你先找到keys()交集,你就可以用推导式来制作字典。

您可以使用 __and__ 对字典进行 reduce()(感谢 UltraInstinct)来构建键的交集。

import operator
# python 3
# from functools import reduce

dicts = [
   {1: 10, 2: 20, 3: 30, 4: 40, 5: 50},
   {1: 20, 3: 60, 5: 100},
   {1: 10, 7: 70, 5: 55}
]

keys = reduce(operator.__and__, map(set, dicts)

{k: [d[k] for d in [d1, d2, d3]] for k in keys}

# {1: [10, 20, 10], 5: [50, 100, 55]}

关于python - 找到字典键的交集并将它们组合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53637702/

相关文章:

php - 改进当前的PHP函数以处理错误

c# - 如何在C#函数中接受多种类型的对象?

python - 在 Django 中处理 M2M 关系

python - 尝试将 Python 2.7 代码转换为 Python 3.4 代码时出现 TypeError

python - 写入 wav 文件会发出咔嗒声

python - 如何在字典理解中创建某些值的元组?

python - Python 亲和性传播中的相似度矩阵

c# - 通过两个字段获取不同的值

c# - List<T>.Contains() 如何找到匹配项?

c++ - 尝试为 Windows API 包装器实现事件处理程序时遇到问题