如何合并字典,从匹配的键中收集值?

新手上路,请多包涵

我有多个像这样的字典(或键值对序列):

 d1 = {key1: x1, key2: y1}
d2 = {key1: x2, key2: y2}

作为一个新的字典,我怎样才能有效地得到这样的结果?

 d = {key1: (x1, x2), key2: (y1, y2)}

原文由 Salil 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 226
2 个回答

假设所有键始终存在于所有字典中:

 ds = [d1, d2]
d = {}
for k in d1.iterkeys():
    d[k] = tuple(d[k] for d in ds)

注意:在 Python 3.x 中使用以下代码:

 ds = [d1, d2]
d = {}
for k in d1.keys():
  d[k] = tuple(d[k] for d in ds)

如果 dic 包含 numpy 数组:

 ds = [d1, d2]
d = {}
for k in d1.keys():
  d[k] = np.concatenate(list(d[k] for d in ds))

原文由 blubb 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是一个通用的解决方案,可以处理任意数量的字典,在某些情况下键只在某些字典中:

 from collections import defaultdict

d1 = {1: 2, 3: 4}
d2 = {1: 6, 3: 7}

dd = defaultdict(list)

for d in (d1, d2): # you can list as many input dicts as you want here
    for key, value in d.items():
        dd[key].append(value)

print(dd) # result: defaultdict(<type 'list'>, {1: [2, 6], 3: [4, 7]})

原文由 Eli Bendersky 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题