利用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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
探寻python多线程ctrl+c退出问题解决方案
Oct 23 Python
python读写二进制文件的方法
May 09 Python
对于Python中RawString的理解介绍
Jul 07 Python
django解决跨域请求的问题
Nov 11 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
将python包发布到PyPI和制作whl文件方式
Dec 25 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 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中md5()函数的用法讲解
2019/03/30 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
小小聊天室Python代码实现
2016/08/17 Python
Python队列的定义与使用方法示例
2017/06/24 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
python日期相关操作实例小结
2019/06/24 Python
keras 读取多标签图像数据方式
2020/06/12 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
班组长工作职责
2013/12/25 职场文书
工作失职检讨书范文
2014/01/16 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
供货协议书
2014/04/22 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
队名及霸气口号大全
2015/12/25 职场文书