Python 递归查找字典树

字典树

tree = {'WenLi': {'ShaoHu': {'ChuGan': {'YingHua': 'No', 'RuanNian': 'Yes'}},
					'QingXi': {'MiDu': {'Da': 'Yes', 'Xiao': 'No'}},
					'MoHu': 'No'}}

1. 递归查找算法

  1. 对于字典树, 第一层是属性列的值, 第二层是属性的取值
  2. 对于测试字典, 第一层是属性列, 第二层是属性列的取值
  3. 取生成树第一层属性列, 和第二层属性的取值, 属性值于测试集中对应列进行比较
    • 相等的时候, 判断属性的下一层的值是不是字典, 如果是字典, 则递归子树, 返回子树的结果
    • 下一层不是字典, 而是取值的时候, 返回值
def match_class(tree:, dict_test: "测试字典") -> "返回判断后的类别":
	root_column = list(decision_tree.keys())[0]
	second_dict = decision_tree[root_column]  # 获取字典树的取值, 第二个字典即属性取值
	
	# 第二层字典的键为属性的取值
	for key in second_dict.keys():
		if key == dict_test[root_column]:
			if type(second_dict[key]).__name__ == "dict":  # 继续递归
				return match_class(second_dict[key], dict_test)
			else:
				return second_dict[key]

2. 测试

  1. 测试用例
if __name__ == '__main__':
	# 对预测值进行处理
	tree = {'WenLi': {'ShaoHu': {'ChuGan': {'YingHua': 'No', 'RuanNian': 'Yes'}},
							   'QingXi': {'MiDu': {'Da': 'Yes', "Xiao": 'No'}},
							   'MoHu': 'No'}}
	
	dict_test = {
		"SeZe": "Wuhei",
		"GenDi": "QuanSuo",
		"QiaoSheng": "ZhuoXiang",
		"WenLi": "MoHu",
		"QiBu": "ShaoAo",
		"ChuGan": "RuanNian",
	}
	result_class = match_class(tree, dict_test)
	print("预测的结果为: ", result_class)

3. 结果

预测的结果为:  No

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页