从列表构建嵌套的python字典

时间:2017-03-17 02:11:00

标签: python loops dictionary nested

我有一个不同长度的字符串,我想创建一个嵌套字典。到目前为止,我有这个,似乎无法弄清楚如何克服变深度问题。

    string = "a/b/c/b"
    x = string.split('/')
    y = {}
    for item in x:
      y[item] = dict()
      .............

我尝试了很多不同的方法,但只是不知道如何动态构建它。我想得到的最终结果是:

{'a' :{'b' : {'c': {'d': {}}}}

会喜欢一些关于设计和想法的反馈,以便实现这一目标。

谢谢,

5 个答案:

答案 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': {}}}}}