Aja*_*jai 5 python dictionary nested-loops
我有一个像这样的嵌套 python 字典
{
"node":{
"node1":{
"node1.1":{
},
"node1.2":{
}
},
"node2":{
"node2.1":{
"node2.1.1":{
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是一个树结构,我可以在其中将子元素添加到任何父元素。有没有办法使用键更新嵌套字典的值?
如果你不知道树中的路径,你可以这样做
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
Run Code Online (Sandbox Code Playgroud)
测试
>>> 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': {}}}}}
>>>
Run Code Online (Sandbox Code Playgroud)
编辑
实现一个简单的树类,它会是这样的
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")
)
)
)
Run Code Online (Sandbox Code Playgroud)
测试
>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)
树类的详细信息取决于您想要的树类型
小智 -2
这是您要找的吗?
dict['node']['node1']['node1.2'] = 'new value'
dict
{'node': {'node1': {'node1.2': 'new value', 'node1.1': {}}, 'node2': {'node2.1': {'node2.1.1': {}}}}}
Run Code Online (Sandbox Code Playgroud)