2017-03-08 176 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)