将列表转换为嵌套字典

时间:2017-03-08 17:02:15

标签: python list python-3.x dictionary

如何将list转换为嵌套的`词典'?

例如:

l = [1, 2, 3, 4] 

我想将其转换为如下字典:

{1: {2: {3: {4: {}}}}}

4 个答案:

答案 0 :(得分:7)

为了反转列表,然后开始创建空字典元素。

l = [1, 2, 3, 4]
d = {}
for i in reversed(l):
    d = {i: d}

>>> print(d)
{1: {2: {3: {4: {}}}}}

答案 1 :(得分:4)

您也可以使用functools.reduce

reduce(lambda cur, k: {k: cur}, reversed(l), {})

<强>演示

>>> from functools import reduce
>>> l = [1, 2, 3, 4]

>>> reduce(lambda cur, k: {k: cur}, reversed(l), {})
{1: {2: {3: {4: {}}}}}

施工流程类似于

{4: {}} -> {3: {4: {}} -> {2: {3: {4: {}}}} -> {1: {2: {3: {4: {}}}}}

作为reduce遍历反向迭代器,生成一个新的单元素dict。

答案 2 :(得分:1)

您可以这样做:

l = [1,2,3,4]
d = {}

for i in l[::-1]:
    d = {i: d}

print(d)
  

{1:{2:{3:{4:{}}}}} [以0.4秒完成]

答案 3 :(得分:1)

这是一个抽象。 setdefault的使用通常被defaultdict所掩盖,但如果您有一个或多个列表(迭代),这里有一个有趣的应用程序:

def make_nested_dict(*iterables):
    """Return a nested dictionary."""
    d = {}
    for it in iterables:
        temp = d
        for i in it:
            temp = temp.setdefault(i, {})
    return d

make_nested_dict([1, 2, 3, 4])
# {1: {2: {3: {4: {}}}}}

make_nested_dict([1, 2, 3, 4], [5, 6])
# {1: {2: {3: {4: {}}}}, 5: {6: {}}}

嵌套分支

defaultdict不同,此技术通过附加到现有“分支”来接受重复键。例如,我们将在第一个(A)分支的第三层附加一个新的7 → 8分支:

                       A         B           C            
make_nested_dict([1, 2, 3, 4], [5, 6], [1, 2, 7, 8])
# {1: {2: {3: {4: {}}, 7: {8: {}}}}, 5: {6: {}}}

目视:

1 → 2 → 3 → 4   (A)            5 → 6   (B)
       \ 
        7 → 8   (C)