树是我们常见的一种一对多的数据结构。

最近为了处理一些事情,写了一颗三层的树。每层的子节点数目均不确定,动态添加。
为了方便管理,写成了嵌套树。

class ModelTree():#第一层树,创建树是必须指定根结点,不支持创建空树。#整颗树存储在tree_dict中,key为root,value为children_dict#children_dict中存储所有的子节点,个数不确定,动态添加def __init__(self, root):self.tree_dict = {}self.children_dict = {}self.root = rootself.tree_dict[self.root] = self.children_dict#获取根结点的方法def get_root(self):return self.root#添加子节点def add_child(self, *args):#子节点中存储两个值,属性名称attr和对应的属性子树对象attrObjattr = args[0]value = args[1]#如果已经有某颗属性子树,则获取attrObj对象,添加新的value值if attr in self.children_dict.keys():attrObj = self.children_dict[attr]attrObj.add_value_child(value)#否则创建一颗新的子树else:attrObj = AttributeChildTree(attr)attrObj.add_value_child(value)self.children_dict[attr] = (attrObj)#获取某颗特定子树的对象def get_single_child(self, attr):return self.children_dict[attr]#获取所有子树/子节点def get_all_children(self):return self.children_dict#获取整颗树def get_tree(self):return self.tree_dict#第二层,属性子树
class AttributeChildTree():#初始化方法,创建树时必须指定根结点,不允许创建空树,根结点的值为属性名称#children_dict存储所有的子节点,子节点包括两个值,一个是该属性的某个值,一个是该值出现的次数#属性子树中的sum值,统计该子树一共获取了多少个值,方便之后根据该值计算每个值出现的频率def __init__(self, root):# root is attr, children are value-frequency pairsself.root = rootself.value_dict = {}self.children_dict = {}self.sum = 0#该方法在整颗树都创建完成之后,所有子节点都添加完毕之后调用。#当然没有添加完毕,也可以达到同样的效果。将把子节点中存储的count值替换为frequencydef __refresh__(self):# call this function after all the attributes added, will refresh apperance to frequencyfor value, apperance in self.children_dict.items():frequency = round(apperance/self.sum,4)self.children_dict[value] = frequency#增加子节点,如果已经存在某个value,count+1,否则创建新的value子树。每增加一个value,sum+1def add_value_child(self, value):if value in self.children_dict.keys():self.sum += 1self.children_dict[value] += 1  # apperance +1else:self.sum += 1self.children_dict[value] = 1#获取根结点def get_root(self):return self.root#获取全部子节点def get_children(self):return self.children_dict

【Python】python实现树结构相关推荐

  1. python坦克大战_Life is short,you need Python——Python实现坦克大战(一)

    先展示一下效果 搓搓小手手,坦克大战即将开始--https://www.zhihu.com/video/1140743290784817152 一.游戏引擎的安装 安装方式有两种:1.pip安装 wi ...

  2. [PYTHON]python 基础笔记(1)

    最近一直在研究python... 自学了一段时间,感觉对我这种本身脑子转不过弯的人来是真心是个不错的选择.. 以下是自己学习总结的笔记,有需要的朋友可以用来参考. 系统版本: Centos6.3 x6 ...

  3. 比较 Python(Python 与其他语言的比较)

    2019独角兽企业重金招聘Python工程师标准>>> ---------<PYTHON核心编程> 比较 Python(Python 与其他语言的比较) Python 已 ...

  4. html标签 补全方法 python,Python Beautiful Soup学习之HTML标签补全功能

    Beautiful Soup是一个非常流行的Python模块.该模块可以解析网页,并提供定位内容的便捷接口. 使用下面两个命令安装: pip install beautifulsoup4或者 sudo ...

  5. python python中max()函数的用法

    python python中max()函数的用法

  6. jupyter notebook打不开,Unable to create process using ‘“e:\python\python.exe“ “G:\python\Scripts\jupyt

    jupyter notebook打不开 报错为: C:\Users\Administrator>jupyter notebook Fatal error in launcher: Unable ...

  7. python在使用绝对路径时出现OSError: [Errno 22] Invalid argument: ‘E:\python\python扩展\text_file\pi_digits.txt

    今天我在练习python文件的绝对路径时发现OSError: [Errno 22] Invalid argument: 'E:\python\python扩展\text_file\pi_digits. ...

  8. 从scratch到python轻松学下载_STEAM教育-[少儿创客] 从Scratch到Python——python turtle-电路城论坛 - 电子工程师学习交流园地...

    从Scratch到Python--python turtle 一种比pygame更加简洁的实现 现在很多学校都开设了Scratch课程,学生可以利用Scratch创作丰富的作品,然而Scratch之后 ...

  9. 初识python——python的发展历程及python各个版本之间的区别,python的安装

    初识python--python的发展历程及python各个版本之间的区别,python的安装 什么是python python的起源 python主要发展历程 python各个版本之间的区别 如何选 ...

  10. 成功解决Exception unhandled RuntimeError run loop already started File: F:\Program Files\Python\Python

    成功解决Exception "unhandled RuntimeError" run loop already started File: F:\Program Files\Pyt ...

最新文章

  1. 使用Vue+Spring Boot实现Excel上传
  2. android 定位的几种方式介绍
  3. 2020-12-03 python 字典 key 和value 互换
  4. Apache配置网站根目录
  5. 数据库原理与应用(SQL Server)笔记 第三章 连接查询
  6. Android开发(六)——组件颜色Selector(Selector与Shape的基本用法 )
  7. deepin安装mysql失败_deepin20无法安装mysql
  8. 运行php程序cpu 100%,php 应用 cpu 100% 调试方法
  9. 【论文写作】SSM房屋租赁系统如何写设计总结
  10. 和老师们合作,注定了是打工的(转)
  11. [Unity]限制一个值的大小(Clamp以及Mathf)
  12. Linux下rootkit病毒专杀工具,linux系统下检测rootkit工具
  13. 编写一个UNIX文件系统
  14. pcs7 总结20170607
  15. 微型计算机原理中MOD指令的含义,微机原理习题库含答案
  16. 软件测试培训两个月靠谱吗?
  17. python中的translate函数_Python:内置函数makestrans()、translate()
  18. windows10专业版安装应用商店方法
  19. 创业者不能盲目的跟风,不然结局很凄凉
  20. 手机厂商为何取消3.5mm耳机孔?主要原因有5点,看完你就知道了

热门文章

  1. php paypal ipn回调,Paypal IPN / Webhook 异步回调流程是怎样的?
  2. git 代码统计工具 gitinspector 使用教程
  3. javaSE01_计算机常识_MarkDown语法
  4. GB2312/GBK/GB18030/BIG5 的历史
  5. css3实现图片一直旋转
  6. Cisco交换机IP和MAC绑定设置方案
  7. Vue 服务端渲染(SSR)、Nuxt2 - 从入门到实践
  8. 【探索 Kubernetes|作业管理篇 系列 7】探究 Pod 有什么用,为什么需要它
  9. IIS下面配置PHP教程
  10. 文件加密和解密C/C++