利用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基础教程之python消息摘要算法使用示例
Feb 10 Python
介绍Python的Django框架中的QuerySets
Apr 20 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
Python创建或生成列表的操作方法
Jun 19 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
python对execl 处理操作代码
Jun 22 Python
学python最电脑配置有要求么
Jul 05 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 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&amp;&amp;mysql)四
2006/10/09 PHP
php批量删除数据
2007/01/18 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP开发注意事项总结
2015/02/04 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
Js切换功能的简单方法
2010/11/23 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
使用js画图之画切线
2015/01/12 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
2015/06/10 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
vue params、query传参使用详解
2017/09/12 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python 正则表达式入门(初级篇)
2016/12/07 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
python3实现表白神器
2019/04/09 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
pandas数据处理之绘图的实现
2020/06/15 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
社区工作感言
2014/02/21 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
内衣营销方案
2014/03/15 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
暑期学习心得体会
2014/09/02 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
2015最新民情日记范文
2015/06/26 职场文书