我正在通过嵌套字典创建决策树,但会出现以下错误
11:{‘q’:‘咖啡还是茶?’,'A':{ ' Coffee‘:咖啡,'Tea':茶}},NameError:名称’Coffee‘未定义。当我注释掉字典11时,我会遇到这个错误
12:{‘Q’:‘冰咖啡还是冰茶?’,'A':{‘冰咖啡:’:IcedCoffee,‘冰茶’:IcedTea}},NameError:名称'IcedCoffee‘未定义
我在前面的‘value dict?’中错误地引用了字典?
#Decision tree implemented as nested linked dictionary
decision_tree_1 = {
0:{'Q':'Would you like to order?', 'A':{'Yes': 1, 'No': 2}},
1:{'Q':'Category ?', 'A':{'Hot Drink': 11, 'Cold Drink': 12,'Food': 13}},
11:{'Q':'Coffee or tea?', 'A':{'Coffee': Coffee, 'Tea': Tea}},
12:{'Q':'Iced Coffee or Iced Tea?', 'A': {'IcedCoffee:': IcedCoffee, 'Iced Tea': IcedTea}},
13:{'Q':'Sandwich or Pastry', 'A': {'Sandwich': Sandwich, 'Pastry': Pastry}},
S:{'Q':'What size?', 'A':{'Small': S1, 'Medium': M,'Large': L}},
Q:{'Q':'What quantity?', 'A':{'1': One, '2': Two,'3': Three}},
Coffee:{'Q':'Coffee', 'A':{}},
Tea:{'Q':'Tea', 'A':{}},
IcedCoffee:{'Q':'Iced Coffee', 'A':{}},
IcedTea:{'Q':'Iced Tea', 'A':{}},
Sandwich:{'Q':'Sandwich', 'A':{}},
Pastry:{'Q':'Pastry', 'A':{}},
S1:{'Q':'Small', 'A':{}},
M:{'Q':'Medium', 'A':{}},
L:{'Q':'Large', 'A':{}},
One:{'Q':'1', 'A':{}},
Two:{'Q':'2', 'A':{}},
Three:{'Q':'3', 'A':{}},
}发布于 2019-12-21 01:32:37
只有当它们是赋值语句的一部分,或者之前已经绑定到某个值时,才是有效的Coffee表达式。
我认为你在这里试图构建的那种自引用结构并不能很好地被带有字符串键的python字典所支持。您可能应该考虑创建某种类型的DecisionTree类,以便它的节点可以按您想要的方式相互引用。
发布于 2019-12-21 01:36:01
以下是决策树的一个子集,缩进效果更好,仅显示与咖啡相关的内容:
dt = {
11:{
'Q':'Coffee or tea?',
'A':{'Coffee': Coffee, 'Tea': Tea}
},
Coffee:{
'Q':'Coffee',
'A':{}
}
}不幸的是,这将得到一个NameError,因为当您第一次在第4行使用Coffee时,您还没有定义它。然后,您尝试在第6行定义它,但出于同样的原因,这也会给出一个NameError。
您可以通过引用第二个Coffee来定义某些内容,但我认为您应该将咖啡定义移到决策树之外。
coffee = {
'Q':'Coffee',
'A':{}
}
tea = ...
dt = {
11:{
'Q':'Coffee or tea?',
'A':{'Coffee': coffee, 'Tea': tea}
},
...
}https://stackoverflow.com/questions/59429196
复制相似问题