2017-03-08 178 views

回答

7

对于扭转名单,然后开始创建空的字典元素。

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

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

你能告诉我的代码,这样我可以查看它。 。 –

+0

for i in rl: \t d = {i:d}这里rl = l [-1:]其中l是一个列表,d是字典 –

+0

d = {} for i in rl:d = {i:d } –

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穿越反向迭代进行新单元素字典。

1

可以做这样的事情:

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

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

print(d) 

{1:{2:{3:{4:{}}}}} [成品在0.4秒]

0

这是一个抽象。用途为setdefault通常由defaultdict所掩盖,但在这里是一个有趣的应用程序,如果你有一个或多个列表(iterables):

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)