利用Python演示数型数据结构的教程
作者:github.com/2012250 发布时间:2022-04-29 07:05:40
标签:Python,数据结构
使用 Python 内建的defaultdict 方法可以轻松定义一个树的数据结构。
简单的说树也可以是一个字典数据结构
def tree(): return defaultdict(tree)
这就是全部,就一行代码。
如果你继续下面的代码,需要先引入
from collections import defaultdict
实例
JSON-esque
现在我们创建一个 JSON-esque 嵌套字典无需显式的创建子字典:
users = tree()
users['harold']['username'] = 'hrldcpr'
users['handler']['username'] = 'matthandlersux'
然后可通过 <code>print(json.dumps(users))</code> 来打印 JSON 数据,结果如下:
{"harold": {"username": "hrldcpr"}, "handler": {"username": "matthandlersux"}}
无需赋值
我们不需要通过赋值就可以创建结构:
taxonomy = tree()
taxonomy['Animalia']['Chordata']['Mammalia']['Carnivora']['Felidae']['Felis']['cat']
taxonomy['Animalia']['Chordata']['Mammalia']['Carnivora']['Felidae']['Panthera']['lion']
taxonomy['Animalia']['Chordata']['Mammalia']['Carnivora']['Canidae']['Canis']['dog']
taxonomy['Animalia']['Chordata']['Mammalia']['Carnivora']['Canidae']['Canis']['coyote']
taxonomy['Plantae']['Solanales']['Solanaceae']['Solanum']['tomato']
taxonomy['Plantae']['Solanales']['Solanaceae']['Solanum']['potato']
taxonomy['Plantae']['Solanales']['Convolvulaceae']['Ipomoea']['sweet potato']
要打印有好的信息,需要转成标准的字典对象:
def dicts(t): return {k: dicts(t[k]) for k in t}
现在可通过 pprint(dicts(taxonomy)) 进行打印了:
{'Animalia': {'Chordata': {'Mammalia': {'Carnivora': {'Canidae': {'Canis': {'coyote': {},
'dog': {}}},
'Felidae': {'Felis': {'cat': {}},
'Panthera': {'lion': {}}}}}}},
'Plantae': {'Solanales': {'Convolvulaceae': {'Ipomoea': {'sweet potato': {}}},
'Solanaceae': {'Solanum': {'potato': {},
'tomato': {}}}}}}
子结构也被当作是字典对象了,而叶子节点是一个空的字典对象
迭代
可以使用有趣的方法对树进行迭代。
例如我们解析一个动物的列表并添加到之前定义的 taxonomy 中,我们可以使用如下代码:
add(taxonomy,
'Animalia,Chordata,Mammalia,Cetacea,Balaenopteridae,Balaenoptera,blue whale'.split(','))
简化实现:
def add(t, keys):
for key in keys:
t = t[key]
我们仍然无需赋值:
{'Animalia': {'Chordata': {'Mammalia': {'Carnivora': {'Canidae': {'Canis': {'coyote': {},
'dog': {}}},
'Felidae': {'Felis': {'cat': {}},
'Panthera': {'lion': {}}}},
'Cetacea': {'Balaenopteridae': {'Balaenoptera': {'blue whale': {}}}}}}},
'Plantae': {'Solanales': {'Convolvulaceae': {'Ipomoea': {'sweet potato': {}}},
'Solanaceae': {'Solanum': {'potato': {},
'tomato': {}}}}}}
结论
上面提及的这些可能用处不大,只是做了一些有意思的代码。
如果你喜欢 Python 的话,把这个当成是乐趣来理解。


猜你喜欢
- 兼容当前HTML/XHTML文档是否有DTD声明:以下为程序代码:var xtop = document.documentElement.s
- 一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上。一般情况下,使用Flask框架开
- 似乎讨论分页的人很少,难道大家都沉迷于limit m,n?在有索引的情况下,limit m,n速度足够,可是在复杂条件搜索时,where s
- Appium在前文的讲解中,我们学会了如何安装Appium,以及一些基础获取App元素内容的方式。但认真看过前文的读者,肯定在博主获取元素的
- 最近做了一些小程序方面的性能优化,如分包加载,添加骨架屏等,这次主要说一下骨架屏的相关内容。关于骨架屏,有三种方法:1.直接请UI同学帮忙P
- 简述Motivation一般来说,每个部分的内容数量是较为容易获取的,但比例(百分数)这样的数据是二次数据,这样的操作很常见比例的信息相比于
- jieba库是一款优秀的 Python 第三方中文分词库,jieba 支持三种分词模式:精确模式、全模式和搜索引擎模式,下面是三种模式的特点
- 一、进入pycharm二、步骤1、开始点击pycharm左上角的file,找到python interpreter,点击右边的设置(长得像齿
- 本文实例为大家分享了js实现简单图片轮播的具体代码,最终实现效果图代码块<!DOCTYPE html><html>
- 1.引言环形图(圆环)在功能上与饼图相同,整个环被分成不同的部分,用各个圆弧来表示每个数据所占的比例值。但其中心的空白可用于显示其他相关数据
- 今天主要给大家介绍如何用pyecharts画各种漂亮的数学图形一、基本极坐标图说简单点,基本极坐标图就是圆形的散点图(柱状图或折线图),代码
- 本文实例为大家分享了vue简单的图书管理具体代码,供大家参考,具体内容如下<table class="table table
- 方法一 1.新建一个同名的数据库 2.再停掉sqlserver(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再
- 在oracle数据库的开发中,常因为时间的问题大费周章,所以特地将ORACLE数据的日期函数收藏致此。乃供他日所查也。 add_months
- 一、在CentOS上安装Python31.下载Python3.10源代码文件下载地址:https://www.python.org/down
- 有一次去超市换货,本能的找到服务中心,服务中心说这个业务在超市旁边一个房间里,由于忘记带小票,那个小房间的人让我去另外一个小房间调电脑里的记
- --------------------------------------------------------- 正则收藏 手机号码: $
- 你可以通过自定义函数接口 (UDF)来添加函数。自定义函数被编译为目标文件,然后用CREATE FUNCTION 和DROP FUNCTIO
- 具体解决方案如下: 一、IE和FF下document.body对象的clientHeight,offsetHeight,scrollHeig
- 我就废话不多说了,大家还是直接看代码吧try: s = socket.socket() s.bind(('127.0.0.1'