我试图结合两个字典来产生这样的结果:

a = {"cat": 3, "dog": 4, "rabbit": 19, "horse": 3, "shoe": 2}
b = {"cat": 2, "rabbit": 1, "fish": 9, "horse": 5}
ab = {"cat": 5, "dog": 4, "rabbit": 20, "horse": 8, "shoe": 2, "fish": 9}


因此,如果它们具有相同的键,则将添加值;如果一个字典中存在一个键,但另一个字典中没有,则它将以其对应的值将其添加到新字典中。

这两个词典也都嵌套在单独的词典中,这样:

x = {'a': {"cat": 3, "dog": 4, "rabbit": 19, "horse": 3, "shoe": 2}, 'c': blah, 'e': fart}
y = {'a': {"cat": 2, "rabbit": 1, "fish": 9, "horse": 5}, 'c': help, 'e': me}


两个主要词典中的键都相同。

我一直在尝试结合两个字典:

def newdict(x,y):
    merged= [x,y]
    newdict = {}
    for i in merged:
        for k,v in i.items():
            new.setdefault(k,[]).append(v)


这给我的是一本字典,其值属于列表中的相同键。我无法弄清楚如何遍历一个键的两个列表并将这些值加在一起以创建一个联合字典。谁能帮我?

最终结果应类似于:

xy = {'a' = {"cat": 5, "dog": 4, "rabbit": 20, "horse": 8, "shoe": 2, "fish": 9}, 'c': blah, 'e': me}


我将不得不反复使用“ c”和“ e”键,并根据“ a”的结果执行不同的计算。

我希望我能清楚地解释我的问题。

最佳答案

我的尝试是:

a = {"cat": 3, "dog": 4, "rabbit": 19, "horse": 3, "shoe": 2}
b = {"cat": 2, "rabbit": 1, "fish": 9, "horse": 5}
def newdict(x, y):
    ret = {}
    for key in x.keys():
        if isinstance(x[key], dict):
            ret[key] = newdict(x[key], y.get(key, {}))
            continue
        ret[key] = x[key] + y.get(key, 0)
    for key in y.keys():
        if isinstance(y[key], dict):
            ret[key] = newdict(y[key], x.get(key, {}))
            continue
        ret[key] = y[key] + x.get(key, 0)
    return ret
ab = newdict(a, b)
print ab
> {'horse': 8, 'fish': 9, 'dog': 4, 'cat': 5, 'shoe': 2, 'rabbit': 20}


说明:

newdict函数首先迭代第一个字典(x)。对于x中的每个键,它将在新词典中创建一个新条目,并将值设置为x[key]y[key]之和。 dict.get函数提供一个可选的第二个参数,当key不在dict中时,该参数将返回。

如果x[key]是字典,则将ret[key]设置为x[key]y[key]的合并字典。

然后,它对y执行相同操作并返回。

注意:这不适用于功能。尝试在那里找出自己的东西。

关于python - 在词典中合并词典并增加值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20177653/

10-12 22:07