递归删除所有值为 NULL 的键

Skh*_*haz 1 python recursion null dictionary

我有一个复杂的dict数组,它有一些作为字符串“NULL”的值,我想删除,我的 dict 看起来像这样:

d = [{
  "key1": "value1",
  "key2": {
    "key3": "value3",
    "key4": "NULL",
    "z": {
       "z1": "NULL",
       "z2": "zzz",
    },
  },
  "key5": "NULL"
}, {
  "KEY": "NULL",
  "AAA": "BBB",
}]
Run Code Online (Sandbox Code Playgroud)

我想清除所有值为NULL 的

像这样:

[{"key1": "value1", "key2": {"key3": "value3", "z": {"z2": "zzz"}}}, {"AAA": "BBB"}]

我使用的是 Python 3.9,因此可以使用 walrus 运算符。

Ann*_*Zen 6

以下是使用递归执行此操作的方法:

def remove_null(d):
    if isinstance(d, list):
        for i in d:
            remove_null(i)
    elif isinstance(d, dict):
        for k, v in d.copy().items():
            if v == 'NULL':
                d.pop(k)
            else:
                remove_null(v)

d = [{
  "key1": "value1",
  "key2": {
    "key3": "value3",
    "key4": "NULL",
    "z": {
       "z1": "NULL",
       "z2": "zzz",
    },
  },
  "key5": "NULL"
}, {
  "KEY": "NULL",
  "AAA": "BBB",
}]

remove_null(d)
print(d)
Run Code Online (Sandbox Code Playgroud)

输出:

[{"key1": "value1", "key2": {"key3": "value3", "z": {"z2": "zzz"}}}, {"AAA": "BBB"}]
Run Code Online (Sandbox Code Playgroud)