gpt4 book ai didi

python - 如何用匹配的键递归替换字典值?

转载 作者:太空狗 更新时间:2023-10-30 02:39:07 25 4
gpt4 key购买 nike

我正在尝试获取字典并找到所有与 key 匹配的键并将它们的值替换为 replace_value。字典理论上可以无限深,所以必须递归完成。

我当前的解决方案正确地替换了值,但引发了一个异常,提示“调用 Python 对象时超出了最大递归深度”(更不用说没有返回值的递归使用不当这一事实)。

def replace_item(obj, key, replace_value):
"""
Replaces the dictionary value of key with replace_value in the obj dictionary.
"""
if key in obj:
obj[key] = replace_value

for k, v in obj.items():
if isinstance(v, dict):
item = replace_item(v, key, replace_value)

if item is not None:
item = replace_value

return obj

它将执行的操作示例如下:

原始词典

person_dict = {
"name": "Alex",
"sex": "M",
"title": "Engineer",
"misc": {
"mailbox": "3A",
"work_type": "remote"
}
}

然后我会调用 replace_item(person_dict, "work_type", "office"),我最好将其切换为返回更新后的字典 (person_dict = replace_item(person_dict, "work_type", "office")).

替换值字典

person_dict = {
"name": "Alex",
"sex": "M",
"title": "Engineer"
"misc": {
"mailbox": "3A",
"work_type": "office"
}
}

我怎样才能修复我的递归?

最佳答案

您有一些奇怪的行为,您期望 返回 但实际上没有。此外,您的描述暗示它应该替换嵌套键,但是当顶层的字典没有键但较低级别的字典有键时,您的代码会丢失。我相信以下代码可以完成您所描述的内容:

def replace_item(obj, key, replace_value):
for k, v in obj.items():
if isinstance(v, dict):
obj[k] = replace_item(v, key, replace_value)
if key in obj:
obj[key] = replace_value
return obj

编辑:正如@dashiell 所建议的,在递归搜索/替换之后移动顶层重新分配避免了 key 存在于 replace_value 中的无限递归陷阱

关于python - 如何用匹配的键递归替换字典值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45335445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com