利用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 def函数的定义、使用及参数传递实现代码
Aug 10 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
tensorflow实现简单逻辑回归
Sep 07 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
Python英文文章词频统计(14份剑桥真题词频统计)
Oct 13 Python
python垃圾回收机制(GC)原理解析
Dec 30 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
Mar 25 Python
如何基于windows实现python定时爬虫
May 01 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP的引用详解
2015/02/22 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
用户注册常用javascript代码
2009/08/29 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
[07:40]DOTA2每周TOP10 精彩击杀集锦vol.4
2014/06/25 DOTA
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
Python的动态重新封装的教程
2015/04/11 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
python批量修改文件编码格式的方法
2018/05/31 Python
python让列表倒序输出的实例
2018/06/25 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
Python 200行代码实现一个滑动验证码过程详解
2019/07/11 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
Python高并发解决方案实现过程详解
2020/07/31 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
商场中秋节活动方案
2014/02/07 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
护士求职自荐信范文
2014/03/19 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
关于倡议书的范文
2015/04/29 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
古诗文之爱国名句(77句)
2019/09/24 职场文书
python实现双链表
2022/05/25 Python