2015-11-04 91 views
0

我試圖從嵌套的詞典中刪除非數值刪除嵌套的字典空類型的字典。我的第一個努力工作正常,但不幸的是指向現在空類型的字典鍵仍然存在。與遞歸函數

所以,如果我做的:

pass1 = stripper(my_dict) 
return stripper(pass1) 

這工作,但我想一個更優雅的嵌套的解決方案可能是可能的嗎?

def stripper(self, data): 
    if isinstance(data, dict): 
     d = ({k: stripper(v) for k, v in data.items() 
      if v not in [u'', None]}) 
     if d: 
      return d 
    else: 
     return data 

編輯:

失敗例如,下面的回報字典爲{'foo': 'bar', 'bar': None}

{ 
    'foo': 'bar', 
    'bar': { 
     'foo': None, 
     'one': None 
    } 
} 
+2

不經常傳遞my_dict到脫衣舞娘......那不結束以及 –

+0

可以喲你發佈一個非常簡單的例子,這不起作用?如果它的葉子在第一輪空類型的字典,那麼它很可能是後續行程可以留下,以及... – mgilson

+0

曾做過空值的鍵,感謝 – rix

回答

1

的字典理解肯定是簡潔的,但如果你將其展開時,該解決方案變得更加明顯:

def stripper(self, data): 
    new_data = {} 
    for k, v in data.items(): 
     if isinstance(v, dict): 
      v = stripper(v) 
     if not v in (u'', None, {}): 
      new_data[k] = v 
    return new_data 
+0

失蹤的'{}'的'不是V(「」 ,None,{})'line - 我沒有測試過它。補充說,看來我的工作。任何人下投票,再看看,因爲我相信這樣做的伎倆。 –