你可以簡單地用一個效用函數做到這一點,像這樣
def add_element(root, path, data):
reduce(lambda x, y: x[y], path[:-1], root)[path[-1]] = data
您可以使用它,像這樣
import collections
tree = lambda: collections.defaultdict(tree)
root = tree()
add_element(root, ['toplevel', 'secondlevel', 'thirdlevel'], 1)
add_element(root, ['toplevel', 'anotherlevel'], 2)
print root
輸出
defaultdict(<function <lambda> at 0x7f1145eac7d0>,
{'toplevel': defaultdict(<function <lambda> at 0x7f1145eac7d0>,
{'secondlevel': defaultdict(<function <lambda> at 0x7f1145eac7d0>,
{'thirdlevel': 1}),
'anotherlevel': 2
})
})
如果要以遞歸方式實現此操作,可以取第一個元素,並從當前的root
中獲取子對象,並從path
中除去第一個元素,以進行下一次迭代。
def add_element(root, path, data):
if len(path) == 1:
root[path[0]] = data
else:
add_element(root[path[0]], path[1:], data)
您可以照原樣使用此代碼。您可以根據需要添加儘可能多的級別。你的問題到底是什麼? – thefourtheye
我不知道我有多少級別,所以我想能夠動態添加它們而不是硬編碼 – user252652
這是遞歸的人,你有沒有試過我的答案?您只需將對象類型從標準對象更改爲字典 – pythonian29033