Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从另一个字典键值对在嵌套字典中更新_Python_Dictionary - Fatal编程技术网

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。