利用Python演示数型数据结构的教程


Posted in Python onApril 03, 2015

使用 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 的话,把这个当成是乐趣来理解。

Python 相关文章推荐
python基础教程之缩进介绍
Aug 29 Python
Python找出最小的K个数实例代码
Jan 04 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
Python将字典转换为XML的方法
Aug 01 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
Sep 04 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
python脚本框架webpy模板赋值实现
Nov 20 Python
简洁的十分钟Python入门教程
Apr 03 #Python
初步解析Python中的yield函数的用法
Apr 03 #Python
几个提升Python运行效率的方法之间的对比
Apr 03 #Python
对于Python的Django框架使用的一些实用建议
Apr 03 #Python
《Python之禅》中对于Python编程过程中的一些建议
Apr 03 #Python
给Python初学者的一些编程技巧
Apr 03 #Python
Python新手在作用域方面经常容易碰到的问题
Apr 03 #Python
You might like
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
PHP图片加水印实现方法
2016/05/06 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
python下载图片实现方法(超简单)
2017/07/21 Python
使用python为mysql实现restful接口
2018/01/05 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
Python3获取cookie常用三种方案
2020/10/05 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
上课迟到检讨书100字
2014/01/11 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android