python - 如何在深度未知的深度嵌套字典中删除空字段或无字段?
问题描述
我有一本深度嵌套的字典,我正在尝试删除所有无或“”的 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',
}
}
解决方案
您可以编写一个函数来递归删除空字典。例如:
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'}}
推荐阅读
- amazon-web-services - AWS g4dn.4xlarge 实例中的驱动程序空间不足
- r - 从栅格/数据框创建有效的随机采样掩码
- java - 我可以在某些字符之间显示字符串吗?
- php - 在 PHP 中获取插入到 SQL 服务器的行?
- python - 为什么“python -V”在 Linux 中输出为标准错误?
- questdb - 尝试将 Questdb 连接到 Grafana 时连接被拒绝
- python - 找不到 Jinja2Exception Flask 模板
- javascript - 在 python 中配置 websocket 服务器
- css - 如何首先显示flatlist最后一部分?
- python - 使用 matplotlib 和 tkinter 实时绘图