Python 递归查找字典树

字典树

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

1. 递归查找算法

  1. 对于字典树, 第一层是属性列的值, 第二层是属性的取值
  2. 对于测试字典, 第一层是属性列, 第二层是属性列的取值
  3. 取生成树第一层属性列, 和第二层属性的取值, 属性值于测试集中对应列进行比较
    • 相等的时候, 判断属性的下一层的值是不是字典, 如果是字典, 则递归子树, 返回子树的结果
    • 下一层不是字典, 而是取值的时候, 返回值
# 分类器预测
def match_class(decision_tree: "建立的生成树", dict_test: "测试的数据集") -> "返回判断后的类别":
	"""
	根据生成的决策时进行预测
	1. 对于字典树, 第一层是属性列的值, 第二层是属性的取值
	2. 对于测试字典, 第一层是属性列, 第二层是属性列的取值
	3. 取生成树第一层属性列, 和第二层属性的取值, 属性值于测试集中对应列进行比较
		1). 相等的时候, 判断属性的下一层的值是不是字典, 如果是字典, 则递归子树,
		2). 下一层不是字典, 而是取值的时候 返回
	4. 返回结果集为class_label
	:param decision_tree: 建立的决策树
	:param dict_test: : 测试集字典
	:return: 返回生成树的分类
	"""
	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]

	pass

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值