python - 从嵌套字典中删除某些字段?

标签 python dictionary

例如我有一个字典:

{
    "a" : 123,
    "b" : {
        "a" : 24324,
        "c" : 9
    },
    "c" : {
        "a" : 123,
        "b" : 64
    }
}

从该字典中删除所有 a 字段的最佳方法是什么?我知道,我可以对该字典进行迭代,删除一个在键上迭代的字段,这些键也是字典等等。

但也许有更优雅的方法来做到这一点?

编辑 感谢您的回答!但是当键可以是列表时,例如 "b": [{"a": 1, "c": 2}]

最佳答案

嗯,在内部你必须通过手动迭代或递归来一项一项地处理这些项目。

这是使用递归的尝试:

def remove_keys(d, to_remove):
    if not isinstance(d, dict):
        return d
    return {k: remove_keys(v, to_remove)
            for k, v in d.items() if k not in to_remove}

您只需将要处理的字典作为第一个参数传递,并将要删除的键的名称(最好作为集合)作为第二个参数传递。对于您的情况:

remove_keys(d, {"a"})

无论它是否更优雅,这取决于你的品味,我想说:)。

如果你想真正改变字典:

def remove_keys_m(d, to_remove):
    if not isinstance(d, dict):
        return d
    for k in to_remove:
        if k in d:
            del d[k]
    for k in d:
            d[k] = remove_keys(d[k], to_remove)
    return d

关于python - 从嵌套字典中删除某些字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47184175/

相关文章:

python - 如何在 Tensorflow 2.2 中训练具有多个输入的 Keras 模型?

python - 在 Tkinter 文本小部件中交换行

python - 将列表转换为字典 python

python - x 轴刻度线未出现在图表中

python - 限制py-redis中redis的连接数

python - 如何防止在 PySide 中使用 QTableWidget 删除项目时插入新行

c# : how to easily display a Dictionary<string, int>?

python - 具有可散列键的自定义字典无法处理递归结构

python - 如何将带有元组键的 python 字典转换为 pandas 多索引数据框?

java - 多个数据结构中的相同数据 - 正确的方法