利用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获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
python socket网络编程之粘包问题详解
Apr 28 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
python实现生成字符串大小写字母和数字的各种组合
Jan 01 Python
python爬虫刷访问量 2019 7月
Aug 01 Python
python找出列表中大于某个阈值的数据段示例
Nov 24 Python
python 实现多维数组转向量
Nov 30 Python
使用Python实现牛顿法求极值
Feb 10 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
Python中快速掌握Data Frame的常用操作
Mar 31 Python
Python关于OS文件目录处理的实例分享
May 23 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
谨慎使用PHP的引用原因分析
2012/09/06 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
js常用代码段整理
2011/11/30 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
python 除法保留两位小数点的方法
2018/07/16 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
Django密码存储策略分析
2020/01/09 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
班组长的岗位职责
2013/12/09 职场文书
老师的检讨书
2014/02/23 职场文书
简历中自我评价范文
2015/03/11 职场文书
户外亲子活动总结
2015/05/08 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
整脏治乱工作简报
2015/07/21 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS