【问题标题】:Merge two 2D dictionaries python合并两个二维字典python
【发布时间】:2015-11-16 09:24:50
【问题描述】:

我有两个 2D python 字典,我想要一个 2D 字典,其中键是前两个字典键的并集,值是 1d 字典的串联。如果一维字典中有重复键,我希望得到它们的值的总和。

所以,假设我已经:

dict1 = { 1: {2: 0.1, 3: 0.3, 4: 0.4} , 
          2 :{1: 0.2, 3: 0.3, 4: 0.5} }
dict2 = { 2: {1: 0.1, 3: 0.8, 5: 0.4} , 
          3 :{1: 0.2, 2: 0.8, 4: 0.5} }

我期望拥有的是:

merged_dict = { 1: {2: 0.1, 3: 0.3, 4: 0.4} , 
                2 :{1: 0.3, 3: 1.1, 4: 0.5 , 5: 0.4} , 
                3: {1: 0.2, 2: 0.8, 4: 0.5} }

我目前正在使用 python 3.2.3

【问题讨论】:

  • 你试过什么?这不是一个人们只为你编写代码的网站。
  • 第一个实验类似于:merged_dict = dict1.update(dict2) 正如我在 1d 字典中看到的那样,但似乎只复制第一个字典值()所以我尝试了另一种方法这在本网站中也有建议,它包含在 mergedict = dict(d1,**d2) 中不起作用,因为它需要字符串但我没有字符串。最后,现在我正在做类似的事情: for item in for item in set(d1.keys()) |设置(d2.keys()):合并[item] = d1[item].update(d2[item])

标签: python dictionary merge 2d


【解决方案1】:

这里没什么特别的,但你总是可以做这样的事情:

merged_dict = dict1.copy()

for key, val in dict2.iteritems():
    if key not in dict1:
        merged_dict[key] = val
    else:
        for key2, val2 in val.iteritems():
            if key2 not in dict1[key]:
                merged_dict[key][key2] = val2
            else:
                merged_dict[key][key2] += val2

(对不起,这是 python 2.7)

另外,如果你想使用defaultdict

from collections import defaultdict
merged_dict = defaultdict(dict)

for key, val in dict1.iteritems():
    merged_dict[key] = defaultdict(int, val)
for key, val in dict2.iteritems():
    if key not in merged_dict:
        merged_dict[key] = defaultdict(int, val)
    else:
        for key2, val2 in val.iteritems():
            merged_dict[key][key2] += val2

【讨论】:

  • 在 python 3.2 中没关系,只是 items() 和 keys() 用于检查存在!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 2022-12-26
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多