关于python:使用递归函数删除嵌套字典中的空dicts

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返回为{'foo': 'bar', 'bar': None}

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