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

时间:2016-01-12 15:29:19

标签: python dictionary nested-loops

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

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

     },
     "node1.2":{  

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

        }
     }
  }
 }
}

我想要实现的是一个树结构,我可以将子元素添加到任何父元素。有没有办法使用键更新嵌套字典的值?

3 个答案:

答案 0 :(得分:3)

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

color

测试

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

修改

实现一个简单的树类,就像这样

>>> 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': {}}}}}
>>> 

测试

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")
                             )
                        )
                   )

树类的细节取决于您想要的树种类

答案 1 :(得分:-1)

是。您必须使用dict[key] = value语法。我建议你在data structure definition

上阅读更多内容

答案 2 :(得分:-1)

这是你要找的吗?

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