利用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发腾讯微博代码分享
Jan 10 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
python中reduce()函数的使用方法示例
Sep 29 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
Django实现发送邮件找回密码功能
Aug 12 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
Django 批量插入数据的实现方法
Jan 12 Python
Python创建临时文件和文件夹
Aug 05 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
python复合条件下的字典排序
Dec 18 Python
使用scrapy实现增量式爬取方式
Jun 21 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
Smarty模板快速入门
2007/01/04 PHP
PHP的基本常识小结
2013/07/05 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
实例讲解PHP表单
2020/06/10 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
基于vue2.0+vuex+localStorage开发的本地记事本示例
2017/02/28 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Python list与NumPy array 区分详解
2019/11/06 Python
基于Python fminunc 的替代方法
2020/02/29 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
La Senza官网:北美顶尖性感内衣品牌
2018/08/03 全球购物
适用于所有创业者的创业计划书
2014/02/05 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
主题实践活动总结
2014/05/08 职场文书
党课主持词大全
2015/06/30 职场文书
七年级作文之英语老师
2019/10/28 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
netty 实现tomcat的示例代码
2022/06/05 Servers