利用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之有容乃大的list(4)
Sep 28 Python
简单介绍Python中利用生成器实现的并发编程
May 04 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
python文本数据处理学习笔记详解
Jun 17 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
python绘制无向图度分布曲线示例
Nov 22 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
python飞机大战游戏实例讲解
Dec 04 Python
快速解决pymongo操作mongodb的时区问题
Dec 05 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中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
js no-repeat写法 背景不重复
2009/03/18 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
对于Python的Django框架使用的一些实用建议
2015/04/03 Python
Python实现选择排序
2017/06/04 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
生物制药自我鉴定
2014/01/25 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
酒店工程部主管岗位职责
2015/04/16 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
浅谈Redis中的RDB快照
2021/06/29 Redis