如何让我的课程按字母解释允许双重查询? typeerror

问题描述

我正在尝试(出于娱乐目的)实现一种始终具有相同结构的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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...