Python 从另一个字典键值对在嵌套字典中更新
我试图从另一个包含键值对的字典中更新现有的嵌套字典,更新应该基于键值对进行。如果一个键存在于另一个字典中,那么它应该被更新,否则就保持原样 这是我试图更新字典的递归代码Python 从另一个字典键值对在嵌套字典中更新,python,dictionary,Python,Dictionary,我试图从另一个包含键值对的字典中更新现有的嵌套字典,更新应该基于键值对进行。如果一个键存在于另一个字典中,那么它应该被更新,否则就保持原样 这是我试图更新字典的递归代码 def update_swagger(d, u): for k, v in u.items(): if isinstance(v, collections.Mapping): d[k] = update_swagger(d.get(k, {}), v
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'}
我正在传递更新的词典如下:
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'
}
另一种方法是:
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)
v不是集合映射的实例,因此它将是k的else,v在u中。items:if is instancev,collections.mapping:请澄清如何调用函数。本质上,d是需要修改的输入吗?又名大摇大摆的模板是的,我认为大摇大摆的模板是d,另一个是u。