问题描述
我正在尝试(出于娱乐目的)实现一种始终具有相同结构的defaultdict。如果n> 1,则它是一个嵌套的defaultdict;否则,默认值为0,这是一个defaultdict(Lm)。
class Lm(dict):
def __init__(self,n=1):
if n == 1:
self.default = 0
else:
self.default = Lm(1)
dict.__init__(self)
def __missing__(self,key):
return dict.__setitem__(self,key,self.default)
def __getitem__(self,key):
try:
return dict.__getitem__(self,key)
except KeyError:
return self.__missing__(key)
由于它有时是嵌套的,所以我希望能够这样访问条目(所需):
test = Lm(2)
test['i']['am']
print(test)
{'i': {'am': 0}}
但是这不起作用,我得到以下错误:
test = Lm(2)
test['i']['am']
TypeError: 'nonetype' object is not subscriptable
我发现,如果我以前用['i']在Lm
中进行过一次查找,则可以正常工作:
test = Lm(2)
test['i']
print(test)
{'i': {}}
test['i']['am']
print(test)
{'i': {'am': 0}}
编辑: 我知道了,这是我的更新代码,下面有建议(包括有关defaultfactory的内容)。
class Lm(dict):
def __init__(self,n=1):
if n == 1:
self.default = lambda val: 0
else:
self.default = lambda val: Lm(1)
def __missing__(self,key):
self.__setitem__(key,self.default(key))
return self.default(key)
def __getitem__(self,key):
try:
val = super().__getitem__(key)
self.__setitem__(key,val)
return val
except KeyError:
self.__missing__(self,self.default(key))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)