我正在创建一个小的记录程序包,如下所示:
from collections import defaultdict
nested_dict = lambda: defaultdict(nested_dict)
logger = nested_dict()
然后我可以在任何脚本中使用它来创建嵌套条目,如下所示:
from utils.logger import logger
logger["some"]["key"] = 1
但是我也希望能够调用append方法,然后自动创建键并添加第一个条目
from utils.logger import logger
logger["some"]["key"].append(1)
这不起作用,显然会引发以下错误:
AttributeError:'collections.defaultdict'对象没有属性'append'
我不太确定如何以不破坏简单API /用法的方式扩展记录器以处理此功能。有什么想法吗?
换句话说,我希望我的记录器推断出它需要创建一个列表作为该键的值。
答案 0 :(得分:-1)
您可以使用lambda函数设置默认值,这样,如果键不存在,它将创建key: default value
而不是抛出KeyError
。
您可以将其设置为int
,float
,具体的整数或字符串,甚至是list()
和more。
logger = defaultdict(lambda: defaultdict(lambda: list()))