Remove empty dicts in nested dictionary with recursive function
我正在尝试从嵌套字典中删除非值。我的第一个努力很好,但不幸的是,指向现在空字典的键仍然存在。
如果我这样做:
1 2 | pass1 = stripper(my_dict) return stripper(pass1) |
这是可行的,但我认为更优雅的嵌套解决方案是可能的?
1 2 3 4 5 6 7 8 | 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 |
编辑:
失败示例,下面的dict返回为
1 2 3 4 5 6 7 | { 'foo': 'bar', 'bar': { 'foo': None, 'one': None } } |
听写理解当然是简洁的,但是如果你把它展开,解决方案就会变得更加明显:
1 2 3 4 5 6 7 8 | 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 |