【发布时间】:2020-06-10 14:03:19
【问题描述】:
我有一本包含子词典的词典。它是一个具有节点、一些叶节点和一些非叶节点的决策树。给定字典,我如何计算其中的每一个?
例如:
{'Outlook': {'Overcast': 'Yes', 'Rain': {'Wind': {'Strong': 'No', 'Weak': 'Yes'}}, 'Sunny': {'Humidity': {'High': 'No', 'Normal': 'Yes'}}}}
这会生成如下所示的树:
其中有三个非叶子节点和五个叶子节点。我对如何做到这一点有一个大致的了解:
def count(d):
a, b = 0, 0 # non-leaf nodes and leaf nodes
for key, value in d.items():
if isinstance(value, dict):
a += 1
# some recursive call on value
else:
b+= 1
return a, b
但我不确定如何组织递归调用。有内置方法吗?
【问题讨论】:
-
不确定我是否理解错了,但dicts应该返回
(x := count(value))[0] +1, x[1],而非dicts返回a, b+1吗? -
只是为了澄清:您希望在递归期间如何处理 a、b?您想要每个级别的 a、b,还是只想要整个递归的总 a、b?
-
需要注意的是root dict的key是分支,root dict的value是新节点。休息很简单,我在下面给出了正确的输出 3、5 的代码。
标签: python dictionary tree decision-tree