错误来自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]
。因为,我在办公室电脑上,我不能尝试不同的模块。
我是否正确地这样做?
答案 0 :(得分:3)
这样的嵌套dict
结构可以使用递归defaultdict
"树"来实现:
def tree():
return defaultdict(tree)
publishDB = tree()
在每个级别,默认分区都使用tree
实例化,这是一个零参数可调用,如果需要。
然后你可以简单地指定标记:
publishDB[subject][student][assignment] = mark
答案 1 :(得分:2)
defaultdict()
要求其第一个参数是可调用的:它必须是您想要实例的类,或者是返回实例的函数。
defaultdict({})
有一个空字典,不可调用。
您可能需要defaultdict(dict)
,因为dict
是一个在实例化(调用)时返回字典的类。
但这仍然无法解决问题...只是将其移至不同的水平。 defaultdict(...)
中的defaultdict(defaultdict(dict))
外部defaultdict(dict)
具有完全相同的问题,因为lambda
无法调用。
您可以使用defaultdict(dict)
表达式来解决此问题,创建一个单行函数,在调用时创建 defaultdict(lambda: defaultdict(dict))
:
defaultdict(lambda: defaultdict(lambda: {}))
如果您愿意,也可以在较低级别使用lambda:
$graphLookup