Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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_Nested Loops - Fatal编程技术网

在Python中更新嵌套字典中的值

在Python中更新嵌套字典中的值,python,dictionary,nested-loops,Python,Dictionary,Nested Loops,我有一个这样的嵌套python字典 { "node":{ "node1":{ "node1.1":{ }, "node1.2":{ } }, "node2":{ "node2.1":{ "node2.1.1":{ } } } } } my_tree={ "node":{ "node1":{

我有一个这样的嵌套python字典

{  
 "node":{  
  "node1":{  
     "node1.1":{  

     },
     "node1.2":{  

     }
  },
  "node2":{  
     "node2.1":{  
        "node2.1.1":{  

        }
     }
  }
 }
}
my_tree={  
     "node":{
         "node1":{
             "node1.1":{},
             "node1.2":{}
             },
         "node2":{
             "node2.1":{
                 "node2.1.1":{}
                 }
             }
         }
     }

def update_tree(tree,key,value):
    """Return true if update, else false"""
    if key in tree:
        tree[key].update(value)
        return True
    for branch in tree.values():
        if update_tree(branch,key,value):
            return True
    return False
class Tree(object):
    def __init__(self,value=None,*branchs):
        self.value  = value
        self.branchs = list(branchs)

    def update(self,parent,value):
        if self.value == parent:
            self.branchs.append(value)
            return True
        for branch in self.branchs:
            if branch.update(parent,value):
                return True
        return False

    def printTree(self,nivel=0):
        print( " "*nivel + str(self.value))
        for branch in self.branchs:
            branch.printTree(nivel+4)


my_tree_class=Tree("node",
                   Tree("node1",
                        Tree("node1.1"),
                        Tree("node1.2")
                        ),
                   Tree("node2",
                        Tree("node2.1",
                             Tree("node2.1.1")
                             )
                        )
                   )

我试图实现的是一个树结构,在这个树结构中,我可以向任何父元素添加子元素。有没有一种方法可以使用键更新嵌套字典的值?

这就是您想要的吗

dict['node']['node1']['node1.2'] = 'new value'
dict
{'node': {'node1': {'node1.2': 'new value', 'node1.1': {}}, 'node2': {'node2.1': {'node2.1.1': {}}}}}

如果你不知道树中的路径,你可以这样做

{  
 "node":{  
  "node1":{  
     "node1.1":{  

     },
     "node1.2":{  

     }
  },
  "node2":{  
     "node2.1":{  
        "node2.1.1":{  

        }
     }
  }
 }
}
my_tree={  
     "node":{
         "node1":{
             "node1.1":{},
             "node1.2":{}
             },
         "node2":{
             "node2.1":{
                 "node2.1.1":{}
                 }
             }
         }
     }

def update_tree(tree,key,value):
    """Return true if update, else false"""
    if key in tree:
        tree[key].update(value)
        return True
    for branch in tree.values():
        if update_tree(branch,key,value):
            return True
    return False
class Tree(object):
    def __init__(self,value=None,*branchs):
        self.value  = value
        self.branchs = list(branchs)

    def update(self,parent,value):
        if self.value == parent:
            self.branchs.append(value)
            return True
        for branch in self.branchs:
            if branch.update(parent,value):
                return True
        return False

    def printTree(self,nivel=0):
        print( " "*nivel + str(self.value))
        for branch in self.branchs:
            branch.printTree(nivel+4)


my_tree_class=Tree("node",
                   Tree("node1",
                        Tree("node1.1"),
                        Tree("node1.2")
                        ),
                   Tree("node2",
                        Tree("node2.1",
                             Tree("node2.1.1")
                             )
                        )
                   )
试验

编辑

实现一个简单的树类,它应该是这样的

{  
 "node":{  
  "node1":{  
     "node1.1":{  

     },
     "node1.2":{  

     }
  },
  "node2":{  
     "node2.1":{  
        "node2.1.1":{  

        }
     }
  }
 }
}
my_tree={  
     "node":{
         "node1":{
             "node1.1":{},
             "node1.2":{}
             },
         "node2":{
             "node2.1":{
                 "node2.1.1":{}
                 }
             }
         }
     }

def update_tree(tree,key,value):
    """Return true if update, else false"""
    if key in tree:
        tree[key].update(value)
        return True
    for branch in tree.values():
        if update_tree(branch,key,value):
            return True
    return False
class Tree(object):
    def __init__(self,value=None,*branchs):
        self.value  = value
        self.branchs = list(branchs)

    def update(self,parent,value):
        if self.value == parent:
            self.branchs.append(value)
            return True
        for branch in self.branchs:
            if branch.update(parent,value):
                return True
        return False

    def printTree(self,nivel=0):
        print( " "*nivel + str(self.value))
        for branch in self.branchs:
            branch.printTree(nivel+4)


my_tree_class=Tree("node",
                   Tree("node1",
                        Tree("node1.1"),
                        Tree("node1.2")
                        ),
                   Tree("node2",
                        Tree("node2.1",
                             Tree("node2.1.1")
                             )
                        )
                   )
试验


树类的详细信息取决于您想要的树的类型

您可以实现一个简单的
树类
并尝试跟踪树以查找特定的
您需要查看dict.get和dict.update,它们可能会对您有所帮助。然而,你的问题非常广泛,我看不出能给出正确的答案。Ajai-你需要的是一个递归函数,它剥离字典的每一层(使用isinstance(value,dict)检查类型),并不断更新嵌套字典,并将其更新到主字典。请发布非常具体的问题,我可以为您提供准确的代码。我认为最好的方法是使用
树类