您可以使用实用程序功能轻松完成此操作
def add_element(root, path, data): reduce(lambda x, y: x[y], path[:-1], root)[path[-1]] = data
可以这样使用
import collectionstree = 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)



