利用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两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
django使用html模板减少代码代码解析
Dec 12 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
python 不以科学计数法输出的方法
Jul 16 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
Python 日志logging模块用法简单示例
Oct 18 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
python绘制无向图度分布曲线示例
Nov 22 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
Python 微信公众号文章爬取的示例代码
Nov 30 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源码之 ext/mysql扩展部分
2009/07/17 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
详解Python在七牛云平台的应用(一)
2017/12/05 Python
python 自动批量打开网页的示例
2019/02/21 Python
Django密码系统实现过程详解
2019/07/19 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
Python日志器使用方法及原理解析
2020/09/27 Python
班班通校本培训方案
2014/03/12 职场文书
师范生见习报告范文
2014/11/03 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS