Из ответа на вопрос
import collections
from functools import reduce
def add_element(root, path, data):
if len(path) == 1:
root[path[0]] = data
else:
add_element(root[path[0]], path[1:], data)
tree = lambda: collections.defaultdict(tree)
root = tree()
add_element(root,["top"],{}) #Make a level
add_element(root,["top","level1"],{}) # Make another level
add_element(root,["top","level1","val"],2) #Data
print(root)
Как я уже говорил, он делает то, что вы хотите.