使用递归函数删除嵌套字典中的空字典

rix*_*rix 1 python python-2.7 python-3.x

我正在尝试从嵌套字典中删除非值。我的第一次努力工作正常,但不幸的是,指向现在空字典的键仍然存在。

所以如果我这样做:

pass1 = stripper(my_dict)
return stripper(pass1)
Run Code Online (Sandbox Code Playgroud)

这有效,但我认为可能有更优雅的嵌套解决方案?

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
Run Code Online (Sandbox Code Playgroud)

编辑:

失败的例子,下面的 dict 返回为{'foo': 'bar', 'bar': None}

{
    'foo': 'bar',
    'bar': {
        'foo': None,
        'one': None
    }
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*ain 6

dict 的理解当然是简洁的,但如果你把它展开,解决方案就会变得更加明显:

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
Run Code Online (Sandbox Code Playgroud)