Python中defaultdict递归tree函数含义及无自定义函数实现方法
问题解答
原代码含义
你提供的第一段代码实现了支持自动创建嵌套层级的字典结构,也叫自动生存(autovivification)字典:
collections.defaultdict的特性是接收一个默认工厂函数作为参数,当访问不存在的键时,会自动调用该工厂函数生成默认值赋值给对应键,不会抛出KeyError。- 自定义的
tree函数返回值为defaultdict(tree),相当于每个层级的默认值都是一个新的、同样以tree为默认工厂的defaultdict,以此实现无限层级的自动嵌套,你可以直接写类似t['level1']['level2']['level3'] = 123的代码,不需要提前逐层创建父级字典。
无需自定义def函数的实现方案
你写的t = defaultdict()没有传入默认工厂参数,访问不存在的键时还是会触发KeyError,自然达不到预期效果。不需要用def声明自定义函数的话,可以用lambda匿名函数实现完全一致的效果:
from collections import defaultdict tree = lambda: defaultdict(tree) t = tree()
如果连单独给匿名函数赋值的步骤都想省略,可以直接写成一行:
from collections import defaultdict t = defaultdict(lambda: defaultdict(lambda.__code__.co_consts[0]))
两种写法都和你最初的自定义函数版本效果完全一致,支持任意层级的嵌套键自动创建。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

