我想知道如何將平面串列轉換為嵌套字典。
例如,
[1, 2, 3, 4]
至{1: {2: {3: 4}}}
我試過了:
nested_list = {i[1]:{{i[x]:i[x 1]} for x in range(2,len(i - 1))}}
其中i
是串列。
任何幫助,將不勝感激!謝謝!
uj5u.com熱心網友回復:
這是一個簡潔的實作,它適用于任何可迭代物件:
from functools import reduce
def make_nested_dict(iterable):
try:
it = reversed(iterable)
except TypeError:
it = reversed(tuple(iterable))
return reduce(lambda x, y: {y: x}, it)
測驗:
>>> make_nested_dict(range(10))
{0: {1: {2: {3: {4: {5: {6: {7: {8: 9}}}}}}}}}
>>> make_nested_dict(iter(range(10)))
{0: {1: {2: {3: {4: {5: {6: {7: {8: 9}}}}}}}}}
一個限制是,對于長度小于 2 的迭代物件,它給出的結果可能并不令人滿意:
>>> make_nested_dict(range(0))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in make_nested_dict
TypeError: reduce() of empty iterable with no initial value
>>> make_nested_dict(range(1))
0
uj5u.com熱心網友回復:
通用解決方案怎么樣:
def make_dict(ll):
if len(ll) < 2:
return {}
dd = {ll[-2]: ll[-1]}
for i in range(3, len(ll) 1):
dd = {ll[-i]: dd}
return dd
print(make_dict([1, 2, 3, 4]))
print(make_dict([1, 2, 3, 4, 5]))
print(make_dict([1, 2, 3, 4, 5, 6, 7, 8, 9]))
結果:
{1: {2: {3: 4}}}
{1: {2: {3: {4: 5}}}}
{1: {2: {3: {4: {5: {6: {7: {8: 9}}}}}}}}
uj5u.com熱心網友回復:
遞回選項
def make_dict(x):
def rmd(a):
if len(a) == 2:
return {a[0]: a[1]}
return {a[0]: rmd(a[1:])}
if len(x) < 2:
return None
if len(x) == 2:
return {x[0]: x[1]}
return {x[0]: rmd(x[1:])}
for i in range(5):
lst = list(range(i))
print(f'{lst} >> {make_dict(lst)}')
輸出:
[] >> None
[0] >> None
[0, 1] >> {0: 1}
[0, 1, 2] >> {0: {1: 2}}
[0, 1, 2, 3] >> {0: {1: {2: 3}}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504909.html