利用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之眼花缭乱的运算符
Sep 14 Python
在Python中处理时间之clock()方法的使用
May 22 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
图文详解WinPE下安装Python
May 17 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
python使用正则筛选信用卡
Jan 27 Python
代码实例讲解python3的编码问题
Jul 08 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
python打开文件的方式有哪些
Jun 29 Python
django中websocket的具体使用
Jan 22 Python
Python实战实现爬取天气数据并完成可视化分析详解
Jun 16 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 存取 MySQL 数据库的一个例子
2006/10/09 PHP
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
JavaScript中的acos()方法使用详解
2015/06/14 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
python获取服务器响应cookie的实例
2018/12/28 Python
python 整数越界问题详解
2019/06/27 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
解析Python3中的Import
2019/10/13 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
python 下载文件的多种方法汇总
2020/11/17 Python
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
企业安全生产承诺书
2014/05/22 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android