Python名称错误“Name”未在嵌套字典中定义

2024-09-27 21:34:42 发布

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

我通过一个嵌套字典创建了一个决策树,但是有一个错误

11:{'Q':'咖啡还是茶?','A':{'Coffee':咖啡,'Tea':茶}}, 名称错误:未定义名称“Coffee”。当我把字典11注释掉时,我面临着错误

12:{'Q':'冰咖啡还是冰茶?','A':{'IcedCoffee:':IcedCoffee,'Iced Tea':IcedTea}}, 名称错误:未定义名称“IcedOffee”

我错误地引用了前一个“值dict”中的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':{}},

}

Tags: or名称tree字典错误dictcoffee未定义
2条回答

下面是决策树的一个子集,具有更好的缩进,仅显示与咖啡相关的内容:

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}
  },
  ...
}

赤字,即文件中的一些字母,如Coffee,只有在它们是赋值语句的一部分,或者它们以前被绑定到一个值时,才是有效的Python表达式。你知道吗

我认为您在这里尝试构建的那种自引用结构并不是由带有字符串键的python dict提供的。您可能应该考虑创建一个DecisionTree类,这样它的节点就可以按照您想要的方式相互引用。你知道吗

相关问题 更多 >

    热门问题