利用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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
Python入门及进阶笔记 Python 内置函数小结
Aug 09 Python
Python编程中的反模式实例分析
Dec 08 Python
Python中使用Tkinter模块创建GUI程序实例
Jan 14 Python
python 性能提升的几种方法
Jul 15 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
Python工厂函数用法实例分析
May 14 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
Python基础之列表常见操作经典实例详解
Feb 26 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 Python
Python几种酷炫的进度条的方式
Apr 11 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 和 COM
2006/10/09 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
shiro授权的实现原理
2017/09/21 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
python实现图片变亮或者变暗的方法
2015/06/01 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
PHP统计代码行数的小代码
2019/09/19 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
python开发前景如何
2020/06/11 Python
Python datetime 如何处理时区信息
2020/09/02 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
最好的商品表达自己:Cafepress
2019/09/04 全球购物
光声世纪笔试题目
2012/08/25 面试题
个人实用简单的自我评价
2013/10/19 职场文书
公司董事长职责
2013/12/12 职场文书
大四自我鉴定
2014/02/08 职场文书
小学生评语大全
2014/04/18 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
农村文化建设标语
2014/10/07 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫