首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用递归过程python更新dict中的值

使用递归过程python更新dict中的值
EN

Stack Overflow用户
提问于 2017-06-28 12:34:14
回答 1查看 1.5K关注 0票数 0

如果已经问到了,很抱歉,但是我在知识库中找不到任何答案。我试图通过递归过程更新字典中的值,下面的代码如下所示:

代码语言:javascript
运行
复制
 import os

 incmds={
     'ip':{
         'link':{
             'show':[]
         },
         'addr':{
             'show':[]
         },
         'route':{
             'show':[]
         }
     }
 }

 cmd_list=[]

 def go_through_dict(parental_key,passeddict,cmd_list):
     for k,v in passeddict.items():
         t=parental_key+' '+k
         if isinstance(v, dict):
             go_through_dict(t,v,cmd_list)
         else:
             t=t.strip()
             cmd_list.append(t)
             with os.popen(t) as f:
 #                print 'Issueing the command: '+t
                 v=f.readlines()
 #                print 'Result:',v
 ## main ##
 cmd=''
 go_through_dict('',incmds,cmd_list)

 for cmd in cmd_list:
     print cmd

 print incmds

当我运行它时,我会看到dict的内部值没有被更新。事实上,我最终得到了:

代码语言:javascript
运行
复制
ip route show
ip link show
ip addr show
{'ip': {'route': {'show': []}, 'link': {'show': []}, 'addr': {'show': []}}}

我认为,在默认情况下,变量是通过引用传递的,因此,如果我在过程中修改某个东西,一旦它终止,更改应该在外部反映出来。问题是,我不会用这样的传统方式修改这些值

代码语言:javascript
运行
复制
incmds['ip']['addr']['show']=<output of the command>

这只是一个POC,目标实际上是将一些OS命令描述为dict树,并将输出存储在叶子中。

我应该如何修改我的过程才能真正地修改我的树的叶子(意思是dict的内部元素的值)?

我应该记录下树中的点,然后再用这个表达式来表达吗?或者是怎么做的?

一开始,我喜欢递归过程的想法,因为无论树的大小如何,它都是紧凑的,但现在我面临的问题是不能更新值:-)

提前谢谢你,

亚历克斯

EN

回答 1

Stack Overflow用户

发布于 2017-06-28 12:41:39

归结起来就是当你翻阅一本字典时:

代码语言:javascript
运行
复制
for k,v in passeddict.items():

修改v,您是而不是修改字典项,您只是为v分配一个新的值。你应该替换:

代码语言:javascript
运行
复制
v=f.readlines()

通过以下方式:

代码语言:javascript
运行
复制
passeddict[k] = f.readlines()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44802584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档