在Python中更新嵌套字典中的值
我有一个这样的嵌套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":{
{
"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)检查类型),并不断更新嵌套字典,并将其更新到主字典。请发布非常具体的问题,我可以为您提供准确的代码。我认为最好的方法是使用树类