我正在尝试从另一个包含键值对的字典中更新现有的嵌套字典,应基于键进行更新。如果另一个字典中存在键,则应对其进行更新,否则应保持不变。
这是我要更新字典的递归代码。
def update_swagger(d, u):
for k, v in u.items():
if isinstance(v, collections.Mapping):
d[k] = update_swagger(d.get(k, {}), v)
else:
d[k] = v
return d
在此输入字典作为参数,如下所示:
swagger_template = {
"d0" :
{
"d0_f1":"d0_v1",
"d3_f1" :"d3_v1"
},
"d1" :
{
"d1_f1":"d1_v1",
"d1_f2" :"d1_v2"
}
}
我要通过的用于更新的字典如下:
{'d0_f1': 's1_v1',
'd3_f1': 's3_v1',
'd1_f1': 's2_v1',
'd1_f2': 's2_v2'}
我得到的现有代码的结果是:
{'d0':
{'d0_f1': 'd0_v1',
'd3_f1': 'd3_v1'},
'd1':
{'d1_f1': 'd1_v1',
'd1_f2': 'd1_v2'},
'd0_f1': 's1_v1',
'd3_f1': 's3_v1',
'd1_f1': 's2_v1',
'd1_f2': 's2_v2'
}
答案 0 :(得分:1)
def update_swagger1(d, u):
for k, v in d.items():
if isinstance(v, collections.Mapping):
for v1, v2 in v.items():
if v1 in u.keys():
d[k][v1] = u[v1]
return d
update_swagger1(d,u)
{'d0': {'d0_f1': 's1_v1', 'd3_f1': 's3_v1'},
'd1': {'d1_f1': 's2_v1', 'd1_f2': 's2_v2'}}
答案 1 :(得分:0)
另一种方法可能是:
def update_swagger(d, u):
k,v = u
if type(d) == type({}):
if k in d:
d[k] = v
else:
[ update_swagger(d_i,u) for d_i in d.values() ]
然后:
for item in new_data.items():
update_swagger(swagger_template,item)