TypeError:第一个参数必须是可调用的,defaultdi

2024-07-02 12:54:45 发布

您现在位置:Python中文网/ 问答频道 /正文

错误来自publishDB = defaultdict(defaultdict({}))我想创建一个类似{subject1:{student_id:{assignemt1:marks, assignment2:marks,finals:marks}} , {student_id:{assignemt1:marks, assignment2:marks,finals:marks}}, subject2:{student_id:{assignemt1:marks, assignment2:marks,finals:marks}} , {student_id:{assignemt1:marks, assignment2:marks,finals:marks}}}的数据库。我试图将其填充为DB[math][10001] = a dict,然后读出来为d = DB[math][10001]。因为,我在我办公室的电脑上,我不能尝试不同的模块。在

我这样做是正确的吗?在


Tags: id数据库db错误mathstudentdictfinals
2条回答

defaultdict()要求其第一个参数是可调用的:它必须是您想要的实例的类或返回实例的函数。在

defaultdict({})的字典为空,不可调用。在

您可能需要defaultdict(dict),因为dict是一个类,它在实例化(调用)时返回字典。在

但这仍然不能解决问题。。。只是把它移到另一个层次。defaultdict(defaultdict(dict))中的外部defaultdict(...)也有完全相同的问题,因为defaultdict(dict)不可调用。在

您可以使用lambda表达式来解决此问题,创建一个单行函数,当调用该函数时,该函数将创建一个defaultdict(dict)

 defaultdict(lambda: defaultdict(dict))

如果需要,也可以使用较低级别的lambda:

^{pr2}$

这种嵌套的dict结构可以使用递归的defaultdict“树”实现:

def tree(): 
    return defaultdict(tree)

publishDB = tree()

在每个级别,defaultdict都用tree实例化,这是一个可以根据需要调用的零参数。 然后您可以简单地指定标记:

^{pr2}$

相关问题 更多 >