擅长:python、mysql、java
<p>只需浏览列表并添加在斜杠字符上拆分的每个字符串的名称。您可以使用setdefault()确保下一级字典存在(即,在运行时自动创建条目)</p>
<pre><code>strings = ['beers', 'wines', 'beers/ipa/stone', 'wines/red/cabernet']
directory = dict()
for path in strings:
d = directory
for name in path.split("/"):
d = d.setdefault(name,dict())
print(directory)
{'beers':
{ 'ipa': {'stone': {}} },
'wines':
{'red': {'cabernet': {}} }
}
</code></pre>
<p><em>使用Python3,每个dict中的项目顺序将与字符串列表中的原始相对顺序相对应</em></p>
<p>如果希望每个字典中的项目以字母数字顺序显示,可以如下更改循环:</p>
<pre><code>directory = dict()
for path in sorted(s.split("/") for s in strings):
d = directory
for name in path:
d = d.setdefault(name,dict())
</code></pre>
<p>如果您喜欢递归函数,这里有一个简单的函数可以做同样的事情(但效率较低):</p>
<pre><code>def makeTree(strings, separator="/", tree=None):
tree = tree or dict()
for name,*subs in (s.split(separator,1) for s in strings):
tree[name] = makeTree(subs, separator, tree.get(name))
return tree
d = makeTree(strings)
print(d)
{'beers':
{ 'ipa': {'stone': {}} },
'wines':
{'red': {'cabernet': {}} }
}
</code></pre>