利用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 正则式 概述及常用字符
May 07 Python
Python写的Socks5协议代理服务器
Aug 06 Python
Python实现遍历数据库并获取key的值
May 17 Python
详解Python的Flask框架中的signals信号机制
Jun 13 Python
Python2和Python3中print的用法示例总结
Oct 25 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
python 定时修改数据库的示例代码
Apr 08 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
Python Django的安装配置教程图文详解
Jul 17 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
pytorch中的自定义数据处理详解
Jan 06 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实现批量查询清除一句话后门的代码
2008/01/20 PHP
php 分库分表hash算法
2009/11/12 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
从手册去理解分析PHP session机制
2011/07/17 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
JavaScript实现鼠标点击后层展开效果的方法
2015/05/13 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
使用py2exe在Windows下将Python程序转为exe文件
2016/03/04 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
python温度转换华氏温度实现代码
2020/12/06 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
HTML5 实现图片上传预处理功能
2020/02/06 HTML / CSS
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
《掌声》教学反思
2014/02/23 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers