python - 如何删除未知深度的深层嵌套字典中的空字段或无字段?

标签 python dictionary recursion

我有一个深层嵌套字典的字典,我正在尝试删除所有 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'}}

关于python - 如何删除未知深度的深层嵌套字典中的空字段或无字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65944618/

相关文章:

有偏差的 Java 递归三角形

c++ - 输入数组并查找数字是否在该数组中(全部使用递归)c++

c# - 为什么C#字典不调用隐藏的GetHashCode方法

python - 将 NumPy 二维阵列中的所有二维点连接为三角形网格

python - 找出最长的连续数字系列的长度

python - 确定这个 RGB 元组是什么颜色

python-3.x - 在python中删除字典中的值

Python 循环创建字典

ruby - 如何增加 ruby​​ 应用程序的堆栈大小。递归应用获取 : Stack level too deep (SystemStackError)

python - 如何确定一个数字可以分解成更小数字之和的方式的数量