假设我有两个字典:
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
答案 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;
}
}