if you don't know the path in the tree you can do something like this
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
test
>>> import pprint
>>> pprint.pprint(my_tree)
{'node': {'node1': {'node1.1': {}, 'node1.2': {}},
'node2': {'node2.1': {'node2.1.1': {}}}}}
>>> update_tree(my_tree,"node2.1",{"node2.1.2":{}})
True
>>> pprint.pprint(my_tree)
{'node': {'node1': {'node1.1': {}, 'node1.2': {}},
'node2': {'node2.1': {'node2.1.1': {}, 'node2.1.2': {}}}}}
>>>
EDIT
implementing a simple tree class, it would be something like this
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")
)
)
)
test
>>> my_tree_class.printTree()
node
node1
node1.1
node1.2
node2
node2.1
node2.1.1
>>> my_tree_class.update("node2.1",Tree("node2.1.2"))
True
>>> my_tree_class.printTree()
node
node1
node1.1
node1.2
node2
node2.1
node2.1.1
node2.1.2
>>>
the details of the tree class depend on the kind of tree you want