这几天一直在学习机器学习实战python代码实现,在程序清单的3-6 获取及诶单数程序,书上的程序是这样的
def getNumLeafs(myTree): numLeafs = 0.0 firstStr=list(dict.keys(myTree))[0] secondDict=myTree[firstStr] print(secondDict) print(secondDict.keys()) for key in secondDict.keys(): print(secondDict[key]) if type(secondDict[key])=='dict': numLeafs+=getNumLeafs(secondDict[key]) else: numLeafs+=1 print(numLeafs) return numLeafs
有的地方为了测试我自己加了几段代码,运行结果如下:
{0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}
dict_keys([0, 1])
no
1.0
{'flippers': {0: 'no', 1: 'yes'}}
2.0
2.0
dict_keys([0, 1])
no
1.0
{'flippers': {0: 'no', 1: 'yes'}}
2.0
2.0
由此看出,在子树{0: 'no', 1: 'yes'}没有运行进去,输出结果应该是3,但是这里是2,显然不对,于是我自己编写一个函数,比书上简洁运行结果是对的:
程序如下:
def getNumLeafs(myTree): numLeafs=0.0 for feat in myTree.keys(): if type(myTree[feat]).__name__=='dict': numLeafs+=getNumLeafs(myTree[feat]) else:numLeafs+=1 return numLeafs
myTree = {'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}} a = getNumLeafs(myTree) print(a) print(myTree.keys())
运行结果如下:
3.0 dict_keys(['no surfacing'])
符合预知的结果: