擅长:python、mysql、java
<p>这在没有递归的情况下更容易做到:</p>
<pre><code>def set_by_path(dct, path, value):
ipath = iter(path)
p_last = next(ipath)
try:
while True:
p_next = next(ipath)
dct = dct.setdefault(p_last, {})
p_last = p_next
except StopIteration:
dct[p_last] = value
</code></pre>
<p>以及一个测试用例:</p>
<pre><code>d = {}
set_by_path(d, ['foo', 'bar', 'baz'], 'qux')
print d # {'foo': {'bar': {'baz': 'qux'}}}
</code></pre>
<p>如果您想拥有它,因此不需要函数,可以使用以下defaultdict工厂,它允许您任意深入地嵌套内容:</p>
<pre><code>from collections import defaultdict
defaultdict_factory = lambda : defaultdict(defaultdict_factory)
d = defaultdict_factory()
d['foo']['bar']['baz'] = 'qux'
print d
</code></pre>