python - 确定树中叶节点数与非叶节点数

标签 python dictionary tree decision-tree

我有一本包含子词典的词典。它是一个带有节点的决策树,一些叶节点和一些非叶节点。在给定字典的情况下,我如何计算其中的每一个?

例如:

{'Outlook': {'Overcast': 'Yes', 'Rain': {'Wind': {'Strong': 'No', 'Weak': 'Yes'}}, 'Sunny': {'Humidity': {'High': 'No', 'Normal': 'Yes'}}}}

这会生成一棵如下所示的树:

enter image description here

其中有3个非叶节点和5个叶节点。我对如何做到这一点有一个大致的了解:

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

但我不确定如何组织递归调用。有内置方法吗?

最佳答案

你可以简单地做

def count(d):
  a, b = 0, 0 # subdicts and not-subdicts
  for key, value in d.items():
    if isinstance(value, dict):
      a += 1
      suba, subb = count(value)
      a += suba
      b += subb
    else:
      b += 1
  return a, b

但是,您的示例有五个“非字典”和五个“字典”。

关于python - 确定树中叶节点数与非叶节点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60418312/

相关文章:

c# - 为什么我不能创建字典<string, dictionary<string,string>>?

python - map() 函数获取输入

algorithm - 树的最小权重顶点覆盖

python - 如何在 PyCharm virtualenv 中安装 .whl 文件?

python - 对一列平均数据进行平均

python - beautifulsoup - 忽略 unicode 错误并仅打印文本

c++ - 使用 boost::serialization 的序列化树结构

python - 如何在Python中查看USDT(Tether)的余额?

scala - Scala 中的嵌套默认映射

java - Java API 是否有数据结构来表示层次结构