在Python中使用None值删除字典中的键的正确方法

New*_*y11 18 python dictionary

None在Python中使用value ==从字典中删除键的正确方法是什么?

mgi*_*son 35

通常,您将创建一个dict通过过滤旧构造的新构造.字典理解很适合这种事情:

{k: v for k, v in original.items() if v is not None}
Run Code Online (Sandbox Code Playgroud)

如果你必须更新原始字典,你可以这样做......

filtered = {k: v for k, v in original.items() if v is not None}
original.clear()
original.update(filtered)
Run Code Online (Sandbox Code Playgroud)

这可能是我能想到的最"干净"的原位移除方式(在迭代时修改dict是不安全的)


original.iteritems()在python2.x上使用

  • 如果您有嵌套字典,这似乎不起作用 (2认同)

Vov*_*ova 9

如果您需要递归删除 None 值,最好使用这个:

def delete_none(_dict):
    for key, value in list(_dict.items()):
        if isinstance(value, dict):
            delete_none(value)
        elif value is None:
            del _dict[key]
        elif isinstance(value, list):
            for v_i in value:
                delete_none(v_i)

    return _dict
Run Code Online (Sandbox Code Playgroud)

根据@dave-cz 的建议,添加了支持列表类型值的功能。

  • 您需要在 `_dict.items()` 之前添加 `list()` 以避免由于迭代期间字典大小变化而引发 `RunTimeError` (2认同)
  • 不需要返回_dict。这只会增加运行时间。_dict 通过引用传递给该方法。您可以将要从中删除字典的副本传递给此函数并获取结果。 (2认同)