我正在尝试使用递归方法,取出字典中所有匹配
一个例子是它执行的操作如下: 原始字典
如何修复递归问题?
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"
}
}
如何修复递归问题?
obj[k] = replace....
而不是obj[key][k] = repla....
否则,如果replace_value
是一个包含键key
的字典,你将会得到一个无限循环,最终导致递归深度异常。 - Aaronkey=some_key,replace_value={some_key:some_value}
,可能会出现最大递归深度错误。 - dashiell