擅长:python、mysql、java
<p>你可能想要一些不依赖于大量嵌套括号的东西。使用对可变对象的引用可以很好地解决这个问题</p>
<pre><code>meta_line = 'abc/pqr123/xy2/yes//T,abc/pqr245/kl3/yes//T,abc/ijk123/op5/yes//T,abc/pqr245/kl4/yes//T'
data = dict()
for item in meta_line.split(','):
dref = data
dict_tree = item.strip().replace('//', '/').split('/')
for i, val in enumerate(dict_tree):
if val in dref:
pass
elif i != len(dict_tree) - 1:
dref[val] = dict()
elif i == len(dict_tree) - 1:
dref[val] = list()
dref = dref[val]
</code></pre>
<p>内部循环的每次迭代都会将引用<code>dref</code>向下移动一个级别,然后在外部循环的每次迭代中重置它。最后,<code>data</code>应该保存嵌套的dict</p>
<p>编辑:对不起,我刚刚注意到您希望最后一级是列表。这是该问题的一种解决方案,但不是最好的(如果在稍后的数据输入想要成为dict的位置有一个列表,则会产生错误)。我可能会选择构建我的嵌套dict,然后用空列表递归地替换任何空dict,以避免这个问题</p>