使用一个返回新字典的递归函数:
def clean_empty(d): if not isinstance(d, (dict, list)): return d if isinstance(d, list): return [v for v in (clean_empty(v) for v in d) if v] return {k: v for k, v in ((k, clean_empty(v)) for k, v in d.items()) if v}
该
{..}构建体是字典解析; 如果
v为 true ,则仅包含原始字典中的键,例如不为空。同样,该
[..]构造会建立一个列表。
嵌套
(.. for ..)构造是生成器表达式,允许表达式 在 递归 后 紧凑地过滤空对象。
请注意,任何设置为 数字0 (整数0,浮点数0.0)的值也将被清除。您可以使用保留数字0值
if v or v == 0。
演示:
>>> sample = {... "fruit": [... {"apple": 1},... {"banana": None}... ],... "veg": [],... "result": {... "apple": 1,... "banana": None... }... }>>> def clean_empty(d):... if not isinstance(d, (dict, list)):... return d... if isinstance(d, list):... return [v for v in (clean_empty(v) for v in d) if v]... return {k: v for k, v in ((k, clean_empty(v)) for k, v in d.items()) if v}... >>> clean_empty(sample){'fruit': [{'apple': 1}], 'result': {'apple': 1}}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)