大佬教程收集整理的这篇文章主要介绍了如何删除深度未知的深度嵌套字典中的空字段或无字段?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个深度嵌套字典的字典,我正在尝试删除所有为 None 或 "" 的 k-v 对。下面的字典 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'}}
,
您可以将递归与字典理解结合使用:
d = {'1': {'1_1': 'a real value','1_2': ''},'2': None,'3': {'3_1': {'3_2': None}}}
def get_d(d):
return {a:c for a,b in d.items() if (c:=(b if not isinstance(b,dict) else get_d(b)))}
print(get_d(d))
输出:
{'1': {'1_1': 'a real value'}}
注意:此解决方案使用 Python 的赋值表达式 (:=
),可在 >= 3.8 版本中使用。对于不使用此范式的解决方案,请参阅@Anonymous 的回答。
以上是大佬教程为你收集整理的如何删除深度未知的深度嵌套字典中的空字段或无字段?全部内容,希望文章能够帮你解决如何删除深度未知的深度嵌套字典中的空字段或无字段?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。