树结构是一种抽象数据类型,在计算机科学领域有着非常广泛的应用。一颗树可以简单的表示为根, 左子树, 右子树。 而左子树和右子树又可以有自己的子树。这似乎是一种比较复杂的数据结构,那么真的能像我们在标题中所说的那样,用一行Python代码就可以实现吗?
一行代码实现?
由于树形结构的外层和内层有着相似的结构,所以多可以用递归的方式定义树。再利用Python中提供的defaultdict
,我们就可以很轻松地定义树了,而且只有一行代码。
from collections import defaultdict def tree(): return defaultdict(tree)
这个代码分享自https://gist.github.com/hrldcpr/2012250。根据上面的代码,一棵树就是一个默认值也为树的字典。
具体效果演示
这样实现的树有两个奇妙之处,第一点是我们不需要创建节点,就可以直接引用它们。例如:
users = tree() users['codingpy']['username'] = 'earlgrey' users['python']['username'] = 'Guido van Rossum'
如果仅从常规字典的特性来看,上面的赋值操作是不成立的,因为我们必须事先声明users['codingpy'] = {}
。但是我们利用的是collections
模块中的defaultdict
类,如果某个键不存在时,它就会利用tree()
来为该键创建一个初始值,因为tree是提供给defaultdict
的default_factory
。根据文档介绍,如果提供该参数,参数的值就传给defaultdict
构造器作为第一个参数。
如果我们以json格式打印上面代码的话(即通过print(json.dumps(users))
),我们会得到下面的结果:
{"codingpy": {"username": "earlgrey"}, "python": {"username": "Guido van Rossum"}}
第二点就是我们甚至不用进行上面那样的赋值操作,只需要引用就可以创建一棵树。例如:
categories = tree() categories['Programming Languages']['Python'] categories['Python']['Standard Library']['sys'] categories['Python']['Standard Library']['os']
如果我们接着运行print(json.dumps(categories))
,就会得到下面的结果:
{"Python": {"Standard Library": {"sys": {}, "os": {}}}, "Programming Languages": {"Python": {}}}
第二个奇妙之处,也被称作Autovivification,该特性最早出现在Perl中,指的是在某个数组被引用时自动创建该数组。Python本身是不支持该特性的,但可以通过本文所述的defaultdict
模仿。
相关推荐
通俗来讲,Python 是一种少有的、既简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。 2.Python的应用范围 Python 在通用应用程序、自动化插件、网站、网络爬虫、数值分析、科学计算...
Python注重解决问题的方法,而不是语法和结构。它被广泛应用于各个领域,包括Web开发、数据分析、人工智能、科学计算等。 Python的优点包括: 简单易学:Python的语法简洁明了,易于理解和学习。 高级特性:Python...
基于Python.Numpy实现决策树,预测鸢尾花的种类与西瓜的好坏 二、文件夹结构功能 1.文件夹 figure:该文档中的图片 data:鸢尾花与西瓜数据集 dot:dot文件路径 2.文件 tree.py:树节点类 decisiontree.py:决策树 ...
# 一、项目介绍 ...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
关于 Python 程序格式框架的描述,以下选项中错误的是 A Python 语言的缩进可以采用 Tab 键实现 B Python 单层缩进代码属于之前最邻近的一行非缩进代码,多层缩进代码根据缩进关系决定所属 范围 C 判断、循环、...
根据王垠的python静态分析工具[PySonar](https://github.com/yinwang0/pysonar2)得到静态语法树,这是一个庞大的dict结构,递归去除一些不必要的参数得到稍微简单点的一个语法树,以免影响后续分析。 这是文件test_...
这就是全部,就一行代码。 如果你继续下面的代码,需要先引入 from collections import defaultdict 实例 JSON-esque 现在我们创建一个 JSON-esque 嵌套字典无需显式的创建子字典: users = tree() users...
④CV_RETR_TREE:检测所有轮廓,所有轮廓建立一个等级树结构,外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。 method参数表示轮廓的近似方法: ①CV_CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点...
从PyPI安装最新版本...代码应简单易行,以确保可预测和可靠的操作 分析中有一个通话记录 所有源代码都处于备用状态 遵循最小惊讶原则清楚地了解目录之间的备份行为,文件的当前状态以及执行后如何处理文件 避免特征
藻树 :evergreen_tree: Algo-Tree是算法和数据结构的集合,这些都是有效代码和良好软件设计的基础。 要成为一名优秀的程序员,就需要创建和设计出色的算法。 它包含各种语言的解决方案,例如C++ , Python和Java 。...
【资源介绍】 基于自动生成知识库的智能问答系统python源码+项目说明+数据+超...4、如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!
如果你喜欢我的作品,请点击星号按钮,如果可能,请分享,这样社区就可以从中受益,因为我正在为我的每个项目/工作解释每一行代码。 我擅长算法和数据结构,我在机器学习和深度学习(计算机视觉)方面有很好的项目。...
代码采用Python3编写。 运行 python3 parser.py 学习建议 本解析器当前分两次提交,第一次是主框架,第二次完成自闭和和属性解析工作。大家可以先看第一次提交,再看第二次提交的内容,必要的时候也可使用diff功能。...
\初级篇 第1章 Qt初步实践 卢传富 建立了第一个较简单的Qt应用程序,在GUI用户界面中显示一行中文。 2 \ 第2章 对话框 \——QDialog 卢传富介绍了Qt的对话框类QDialog,实现了一个自定义的登录对话框,举例说明了Qt...
\初级篇 第1章 Qt初步实践 卢传富 建立了第一个较简单的Qt应用程序,在GUI用户界面中显示一行中文。 2 \ 第2章 对话框 \——QDialog 卢传富介绍了Qt的对话框类QDialog,实现了一个自定义的登录对话框,举例说明了...
除其他功能外,最新版的壮举OpenFermion是一个开放源代码库,用于编译和分析量子算法以模拟包括离子化学在内的费米电子系统。 除其他功能外,该版本还具有数据结构和工具,可用于获取和操纵费米离子和量子位哈密顿量...
此版本包含LA-MCTS的实现及其在神经体系结构搜索(LaNAS)中的应用,但也可以应用于大规模超参数优化,强化学习,调度,优化计算机系统等。神经建筑搜索(NAS) 评估:无需训练模型即可在笔记本电脑上的NASBench-...
除了自动建立树结构之外,ANTLR 4还能自动生成语法分析树遍历器的实现:监听器(listener)或者访问器(visitor)。监听器与在XML文档的解析过程中响应SAX事件的处理器相似。 由于拥有以下几点ANTLR 3所不具备的新...
使用Cling包装工具从源代码构建Cling的树有一个用Python编写的用户友好的命令行实用程序,称为Cling包装工具(CPT),它可以从源代码构建Cling并生成适用于多种平台的安装程序包。 CPT需要Python 3或更高版本。 ...
Cling的树有一个用Python编写的用户友好的命令行实用程序,称为Cling包装工具(CPT),它可以从源代码构建Cling并生成适用于多种平台的安装程序包。 CPT需要Python 3或更高版本。 如果您在本地克隆了Cling的源代码...