Python列表到嵌套键

Python列表到嵌套键,python,python-2.7,Python,Python 2.7,我试图从列表中创建/填充嵌套字典 例如,列表[[['a','b','c'],值]可以创建: data['a']['b']['c'] = value 给我一本字典: { 'a': { 'b': { 'c' : value } } } 非常感谢所有帮助。Python: l = [['a', 'b', 'c'], 'foo'] d = l[1] for k in l[0][::-1]: d = {k : d} print d 输出: {'a': {'b': {'c': 'foo'}}}

我试图从列表中创建/填充嵌套字典

例如,列表
[[['a','b','c'],值]
可以创建:

data['a']['b']['c'] = value
给我一本字典:

{ 'a': { 'b': { 'c' : value } } }
非常感谢所有帮助。

Python:

l = [['a', 'b', 'c'], 'foo']
d = l[1]
for k in l[0][::-1]:
    d = {k : d}
print d
输出:

{'a': {'b': {'c': 'foo'}}}
(假设您有多个多键/值对。)

您可以使用
setdefault
为所有子项添加嵌套字典,除非它们已经存在,否则每次都会继续为所有子项添加新字典,但最后一个子项除外。然后将值放入最里面的dict中

def add_nested(d, keys, value):
    for k in keys[:-1]:
        d = d.setdefault(k, {})
    d[keys[-1]] = value
例如:

values = [
    [['a','b','c'], 1],
    [['a','b','d'], 2],
    [['a','e','f'], 3]]

result = {}
for keys, value in values:
    add_nested(result, keys, value)
print(result)
结果:

{'a': {'b': {'c': 1, 'd': 2}, 'e': {'f': 3}}}
>>> 
{'a': {'b': {'c': 1}}}
{'c': {'d': 1}}

或者,您也可以使用旧的:


使用生成器和递归样式:

a = [
     [['a','b','c'],1],
     [['c','d'],1],
    ]

def l2d(a):
    def mkd(k,v):
        if not k:
            return v
        return {k[0]:mkd(k[1:],v)}
    for k, v in a:
        yield mkd(k,v)

for d in l2d(a):
    print d
结果:

{'a': {'b': {'c': 1, 'd': 2}, 'e': {'f': 3}}}
>>> 
{'a': {'b': {'c': 1}}}
{'c': {'d': 1}}

这似乎是相似的:这也是很接近的,虽然稍微不同的问题考虑使用非嵌套字典,由元组键。然后你可以做
d={};d['a',b',c']=value
为什么不直接
d=l[1]
然后在循环中
d={k:d}
?@jojo是的,谢谢你的简化。这是一个很好的答案。我认为这个问题不应该被勾选为“太宽泛”。