利用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中的yield浅析
Jun 16 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
利用Python进行异常值分析实例代码
Dec 07 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
python爬虫基本知识
Mar 05 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
对python插入数据库和生成插入sql的示例讲解
Nov 14 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
Python 如何定义匿名或内联函数
Aug 01 Python
python爬取抖音视频的实例分析
Jan 19 Python
pycharm配置QtDesigner的超详细方法
Jan 25 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
php下封装较好的数字分页方法
2010/11/23 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
javascript 对象的定义方法
2007/01/10 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
js实现继承的5种方式
2015/12/01 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
细说webpack6 Babel的使用详解
2019/09/26 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
Python中统计函数运行耗时的方法
2015/05/05 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
python使用tornado实现登录和登出
2018/07/28 Python
python 调用钉钉机器人的方法
2019/02/20 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Python如何给函数库增加日志功能
2020/08/04 Python
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
大学学生会竞选演讲稿
2014/04/25 职场文书
python urllib库的使用详解
2021/04/13 Python
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
浅谈Redis缓冲区机制
2022/06/05 Redis