利用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的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
在Python的Django框架中包装视图函数
Jul 20 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
Python决策树分类算法学习
Dec 22 Python
python爬取淘宝商品销量信息
Nov 16 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
如何理解python对象
Jun 21 Python
Python连接Impala实现步骤解析
Aug 04 Python
详解python datetime模块
Aug 17 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 Python
Python OpenCV形态学运算示例详解
Apr 07 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桌面中心(四) 数据显示
2007/03/11 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
分享33个jQuery与CSS3实现的绚丽鼠标悬停效果
2014/12/15 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
[47:45]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第一场 2月26日
2021/03/11 DOTA
python中二维阵列的变换实例
2014/10/09 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
python实现网页录音效果
2020/10/26 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
信息专业学生学习的自我评价
2014/02/17 职场文书
物业管理工作方案
2014/05/10 职场文书
反邪教警示教育方案
2014/05/13 职场文书
股指期货心得体会
2014/09/13 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
黄河绝恋观后感
2015/06/08 职场文书
地心历险记观后感
2015/06/15 职场文书
《失物招领》教学反思
2016/02/20 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS