报错代码块:
def classify(inputTree,featLabels,testVec):
firstStr = inputTree.keys()[0]
secondDict = inputTree[firstStr]
featIndex = featLabels.index(firstStr) #将标签字符串转换成索引
key = testVec[featIndex]
valueOfFeat = secondDict[key]
if isinstance(valueOfFeat, dict):
classLabel = classify(valueOfFeat, featLabels, testVec)
else: classLabel = valueOfFeat
return classLabel
报错信息:
TypeError: 'dict_keys' object is not subscriptable
意思是’dict_keys’对象不可使用下标,原因是dict的value()和key()返回的并不是一个真正的数组,所以,处理方法也很简单,只需要用list()强制转换一下即可:
def classify(inputTree,featLabels,testVec):
firstStr = list(inputTree.keys())[0]
#firstStr = next(iter(inputTree))这种方法也可以
secondDict = inputTree[firstStr]
featIndex = featLabels.index(firstStr) #将标签字符串转换成索引
key = testVec[featIndex]
valueOfFeat = secondDict[key]
if isinstance(valueOfFeat, dict):
classLabel = classify(valueOfFeat, featLabels, testVec)
else: classLabel = valueOfFeat
return classLabel