利用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 28 Python
python中OrderedDict的使用方法详解
May 05 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
Nov 14 Python
python基于物品协同过滤算法实现代码
May 31 Python
python主线程捕获子线程的方法
Jun 17 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
Python中的相关分析correlation analysis的实现
Aug 29 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
Python3获取cookie常用三种方案
Oct 05 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 Python
解决Pymongo insert时会自动添加_id的问题
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
php5.2时间相差8小时
2007/01/15 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
用Python创建声明性迷你语言的教程
2015/04/13 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
python用户管理系统
2018/03/13 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
linux环境下Django的安装配置详解
2019/07/22 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
环境科学专业个人求职信
2013/09/26 职场文书
自主招生自荐书
2013/11/29 职场文书
法制宣传教育方案
2014/05/09 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript