2013-09-29 76 views
0

我具有由其他字典的像这样(例如)一个python词典:字典类型的字典蟒

{2: {4: {5: {6: {7: None}}}, 7: None}, 7: None} 

我想,这样我最终提取的键:

[2,4,5,6,7,None] 
[2,7,None] 
[7,None] 

我试图用递归函数解决这个问题,但是没有运气...但是没有运气...

def f(d): 
    paths = [] 
    try: 
     for key in f.keys(): 
      path.append(f(d[key])) 
    pass: 
     pass 

有没有办法做到这一点如何?

+0

我不明白你如何让你的期望的输出没有。你能解释一下吗? – TerryA

+0

如果您只是在子呼叫中丢弃中间结果(即'路径),则递归不起作用。 –

回答

1

下,似乎这样的伎俩:

def f(d): 
    paths = [] 
    for key, value in d.items(): 
     if value is None: 
      paths.append([key, value]) 
     else: 
      internal_lists = f(value) 
      for l in internal_lists: 
       paths.append([key] + l) 
    return paths 

1)你试试:循环写的不好:语法是

try: 
    xxx 
except: 
    xxx 

,做你期望一个失败吗?为什么尝试?

for key in f.keys(): 

f是一个函数,它不具有键:既不

2)你的循环不可能是正确的。 d确实。

3)当用钥匙打交道时,你需要在某处输出保持它,而你暂时

+0

谢谢!效果很好。你在第1),2)和3)点是对的,谢谢你的评论! – Anders

+1

作为一个生成器,它看起来会更漂亮:https://gist.github.com/eallik/6752160 :) **更新:**在Python 3中,'yield from'使它更好。 –

+0

谢谢@ ErikAllik,非常干净,我会查找那个(我使用2.7 btw。) – Anders