如何删除深度嵌套词典中出现所选键的位置的键:值对? [英] How can I remove a key:value pair wherever the chosen key occurs in a deeply nested dictionary?

查看:36
本文介绍了如何删除深度嵌套词典中出现所选键的位置的键:值对?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

关于

此问题是关于删除键的最基本问题:找到键的值对,遍历整个词典。

其他问题


之前:

我有一个多次嵌套的词典。

{
    "key0": {
        "key1a": {
            "sub_key2a": "sub_value2a",
            "sub_key2b": "sub_value2b"
        },
        "key1b": {
            "key_XYZ": {
                "sub_key2a": "sub_value2a",
                "sub_key2b": "sub_value2b"
            }
        }
    }
}

之后:

结果应该如下所示,删除所有"sub_key2a"键及其值:

{
    "key0": {
        "key1a": {
            "sub_key2b": "sub_value2b"
        },
        "key1b": {
            "key_XYZ": {
                "sub_key2b": "sub_value2b"
            }
        }
    }
}

在迭代时修改Python词典

当我遍历要删除的词典条目时,出现错误

RuntimeError: dictionary changed size during iteration

这需要设法避免。

如何在词典中的某个位置每次出现"sub_key2a"键时删除"sub_key2a": SOME_VALUE键值对?

推荐答案

技巧

诀窍是在递归到达子级之前,提前查明Target_key是否在下一个子级中(=this_dict[key]=当前dict迭代的值)。只有到那时,您仍然可以在迭代字典时删除子级别的键:值对。一旦您达到与要删除的键相同的级别,然后尝试从那里删除它,您会收到错误:

RuntimeError: dictionary changed size during iteration

代码

因此,代码如下所示:

import copy

def find_remove(this_dict, target_key, bln_overwrite_dict=False):
    if not bln_overwrite_dict:
        this_dict = copy.deepcopy(this_dict)

    for key in this_dict:
        # if the current value is a dict, dive into it
        if isinstance(this_dict[key], dict):
            if target_key in this_dict[key]:
                this_dict[key].pop(target_key)

            this_dict[key] = find_remove(this_dict[key], target_key)

    return this_dict

dict_nested_new = find_remove(nested_dict, "sub_key2a")

制作者名单

这几乎是衍生产品How can I replace a key:value pair by its value wherever the chosen key occurs in a deeply nested dictionary?的副本。但我花了一段时间才改变了答案,这样它就会删除一个键:按键取值。这就是我分享这篇文章的原因,请注意,95%的点数都流向了链接!

衍生答案的主要附加价值在于,您可以在进入下一个递归级别之前通过选中if target_key in this_dict[key]:中搜索target_key


旁注:格式化输出

如果要打印或保存词典,请参阅How do I write JSON data to a file?

这篇关于如何删除深度嵌套词典中出现所选键的位置的键:值对?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆