class Tree(dict): def __missing__(self, key): value = self[key] = type(self)() return value tree = Tree() tree['s1']['s2']['s3'] = '1' print(tree)