これは、ここで提供されるソリューションに関連する質問です。ソリューションとして次のコードが含まれます。
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' は、次のノードにインデックスを付けずに、さらにネストされた辞書を取得し続けるにはどうすればよいですか? 意味が分からない場合は申し訳ありませんが、これがどのように機能するかわかりません。
ご協力いただきありがとうございます!