这是与此处提供的解决方案相关的问题,它涉及以下代码作为解决方案:
from collections import MutableMapping
def set_value(d, keys, newkey, newvalue, default_factory=dict):
"""
Equivalent to `reduce(dict.get, keys, d)[newkey] = newvalue`
if all `keys` exists and corresponding values are of correct type
"""
for key in keys:
try:
val = d[key]
except KeyError:
val = d[key] = default_factory()
else:
if not isinstance(val, MutableMapping):
val = d[key] = default_factory()
d = val
d[newkey] = newvalue
我希望有人能给我一些解释为什么这段代码有效。我很困惑传入的 dict 'd' 不会在 d = val 的地方不断被覆盖。dict 'd' 如何在不索引到下一个节点的情况下继续获得更多嵌套字典?抱歉,如果这没有意义,我不明白这是如何工作的。
谢谢你的帮助!