我有一个不同长度的字符串,我想创建一个嵌套字典。到目前为止,我有这个,似乎无法弄清楚如何克服变深度问题。
string = "a/b/c/b"
x = string.split('/')
y = {}
for item in x:
y[item] = dict()
.............
我尝试了很多不同的方法,但只是不知道如何动态构建它。我想得到的最终结果是:
{'a' :{'b' : {'c': {'d': {}}}}
会喜欢一些关于设计和想法的反馈,以便实现这一目标。
谢谢,
答案 0 :(得分:3)
只需按如下方式更新循环:
y = {}
for item in reversed(x):
y = {item: y}
答案 1 :(得分:2)
One Line Reduce版本@ozgur's answer
>>> string = "a/b/c/d"
>>> reduce(lambda x, y: {y: x}, reversed(string.split('/')), {})
{'a': {'b': {'c': {'d': {}}}}}
但我更喜欢@ozgur的原始答案
答案 2 :(得分:0)
试试这个:
string = "a/b/c/b"
x = string.split('/')
x.reverse()
y = {}
count=0
for item in x:
if count==0:
tmp={item:{}}
else:
tmp={item: tmp}
count+=1
print tmp
输出:
{'a': {'b': {'c': {'b': {}}}}}
答案 3 :(得分:0)
这样做的一个简单方法是递归:
def fn(s):
if not s:
return {}
x, *y = s # Python3, for Python2 x, y = s[0], s[1:]
return {x:fn(y)}
>>> fn("a/b/c/b".split('/'))
{'a': {'b': {'c': {'b': {}}}}}
但是如果你想迭代地做,那么你非常接近,只需使用光标沿着结构走下去:
>>> y = {}
>>> c = y
>>> for item in "a/b/c/b".split('/'):
... c[item] = {}
... c = c[item]
>>> y
{'a': {'b': {'c': {'b': {}}}}}
答案 4 :(得分:0)
>>> text = 'a/b/c/d'
>>> d = node = {}
>>> for c in text.split('/'):
... node = node.setdefault(c, {})
...
>>> d
{'a': {'b': {'c': {'d': {}}}}}