我正在通过嵌套字典创建决策树,但是会出现错误
11:{'Q':'咖啡还是茶?','A':{'Coffee':咖啡,'Tea':茶}}, NameError:未定义名称“咖啡”。当我注释掉字典11时遇到错误
12:{'Q':'冰咖啡还是冰茶?','A':{'IcedCoffee:':IcedCoffee,'Iced Tea':IcedTea}}, NameError:名称“ IcedCoffee”未定义
我在上一个值字典中错误地引用了该字典?
#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':{}},
}
答案 0 :(得分:2)
关键字,也就是仅存在于文件中的一些字母,例如Coffee
,只有它们是分配语句的一部分,或者以前已绑定到值,它们才是有效的Python表达式。
我认为您尝试在此处构建的自引用结构不能很好地由带有字符串键的python dict提供。您可能应该考虑创建某种DecisionTree类,以便其节点可以按您希望的方式相互引用。
答案 1 :(得分:1)
这是您的决策树的子集,缩进效果更好,仅显示与咖啡有关的内容:
dt = {
11:{
'Q':'Coffee or tea?',
'A':{'Coffee': Coffee, 'Tea': Tea}
},
Coffee:{
'Q':'Coffee',
'A':{}
}
}
不幸的是,这将得到一个NameError
,因为在第4行上首次使用Coffee
时,您尚未定义它。然后,您尝试在第6行上对其进行定义,但是出于相同的原因,这也会给出一个NameError
。
您可以通过引用第二个Coffee
来定义一些内容,但是我认为应该将Coffee定义移到决策树之外。
coffee = {
'Q':'Coffee',
'A':{}
}
tea = ...
dt = {
11:{
'Q':'Coffee or tea?',
'A':{'Coffee': coffee, 'Tea': tea}
},
...
}