我应该如何合并两个字典而不覆盖相同的键?

时间:2019-09-06 07:35:56

标签: python python-3.x dictionary

假设我有两个字典:

d1={'a01': {'prod':1.0}}
d2={'a01': {'dev':2.0}, 'a02': {'dev': 3.0}}

我想将它们合并为:

{
  'a01': {'prod':1.0, 'dev': 2.0},
  'a02': {'dev': 3.0}
}

我可以用非常丑陋的方式做到这一点,有人可以对理想方法提出任何建议吗?

这可能是示例代码,但效果很差。

def merge_result(r1, r2):
    for id in r2.keys():
        if id in r1.keys():
            r1[id].update(r2[id])
        else:
            r1[id] = dict()
            r1[id].update(r2[id])
    return r1

4 个答案:

答案 0 :(得分:2)

您可以使用基本的for循环来实现:

d1={'a01': {'prod':1.0}}
d2={'a01': {'dev':2.0}, 'a02': {'dev': 3.0}}

for key,value in d2.items():
    if key in d1.keys():
        d1[key].update(value)
    else:
        d1[key] = value

print (d1)

输出:

{'a01': {'prod': 1.0, 'dev': 2.0}, 'a02': {'dev': 3.0}}

答案 1 :(得分:0)

该代码如何:

dic = dict(d1, **d2)
for key in dic.keys():      # find the key in d1
    if key in d1:
        dic[key] = dict(dic[key], **d1[key])

输出:

{'a01': {'dev': 2.0, 'prod': 1.0}, 'a02': {'dev': 3.0}}

答案 2 :(得分:0)

您可以使用:

{k: {**d1.get(k,{}), **d2.get(k, {})} for k in {*d1} | {*d2}}

输出:

{'a02': {'dev': 3.0}, 'a01': {'prod': 1.0, 'dev': 2.0}}

答案 3 :(得分:0)

在集合模块中使用defaultdict

defaultdict(<class 'dict'>, {'a01': {'prod': 1.0, 'dev': 2.0}, 'a02': {'dev': 3.0}})

输出

public class GameData {

    private static double highScore;

    public static double getHighScore() {
        return highScore;
    }

    public static void setHighScore(double hs) {
        highScore = hs;
    }
}