首页 > 解决方案 > 如何在深度未知的深度嵌套字典中删除空字段或无字段?

问题描述

我有一本深度嵌套的字典,我正在尝试删除所有无或“”的 kv 对。下面的字典d是输入的一个例子。

d = { 
  "1": {
    "1_1": 'a real value',
    "1_2": ""
    },
   "2": None,
   "3": {
     "3_1": {
       "3_2": None
     }
   }
}

通常,要删除字典中的空字段,该命令{k:v for k,v in d.items() if v}会完成这项工作。但在这种情况下,我想删除所有值为空或 null 的嵌套字典,我不知道如何执行此操作。有任何想法吗?

经过d这个转换后,所有值为空的空字典都应该消失了。它应该如下所示:

{ 
  "1": {
    "1_1": 'a real value',
    }
}

标签: pythondictionaryrecursion

解决方案


您可以编写一个函数来递归删除空字典。例如:

def return_non_empty(my_dict):
    temp_dict = {}
    for k, v in my_dict.items():
        if v:
            if isinstance(v, dict):
                 return_dict = return_non_empty(v)
                 if return_dict:
                     temp_dict[k] = return_dict
            else:
                temp_dict[k] = v
    return temp_dict

例如,如果d是:

d = { 
  "1": {
    "1_1": 'a real value',
    "1_2": ""
    },
   "2": None,
   "3": {
     "3_1": {
       "3_2": None
     }
   }
}

然后我的自定义函数return_non_empty将返回:

>>> return_non_empty(d)
{'1': {'1_1': 'a real value'}}

推荐阅读