利用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使用PyFetion来发送短信的例子
Apr 22 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
Python实现决策树C4.5算法的示例
May 30 Python
Python3中列表list合并的四种方法
Apr 19 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
Python大批量搜索引擎图像爬虫工具详解
Nov 16 Python
python3实现飞机大战
Nov 29 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自定义大小验证码的方法详解
2013/06/07 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
js更优雅的兼容
2010/08/12 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
微信小程序搭建(mpvue+mpvue-weui+fly.js)的详细步骤
2018/09/18 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
十八大感想感言
2014/02/10 职场文书
毕业设计说明书
2014/05/07 职场文书
优秀会计求职信
2014/07/04 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
GPU服务器的多用户配置方法
2022/07/07 Servers