python 中的 easydict
或
- import time
- dir(time)
easydict的作用:可以使得以属性的方式去访问字典的值!
- >>> from easydict import EasyDict as edict
- >>> d = edict({'foo':3, 'bar':{'x':1, 'y':2}})
- >>> d.foo
- 3
- >>> d.bar.x
- 1
- >>> d = edict(foo=3)
- >>> d.foo
- 3
解析json目录时很有
- >>> from easydict import EasyDict as edict
- >>> from simplejson import loads
- >>> j = """{
- "Buffer": 12,
- "List1": [
- {"type" : "point", "coordinates" : [100.1,54.9] },
- {"type" : "point", "coordinates" : [109.4,65.1] },
- {"type" : "point", "coordinates" : [115.2,80.2] },
- {"type" : "point", "coordinates" : [150.9,97.8] }
- ]
- }"""
- >>> d = edict(loads(j))
- >>> d.Buffer
- 12
- >>> d.List1[0].coordinates[1]
- 54.9
- >>> d = EasyDict()
- >>> d.foo = 3
- >>> d.foo
- 3
- >>> d = EasyDict(log=False)
- >>> d.debug = True
- >>> d.items()
- [('debug', True), ('log', False)]
- >>> class Flower(EasyDict):
- ... power = 1
- ...
- >>> f = Flower({'height': 12})
- >>> f.power
- 1
- >>> f['power']
- 1
EasyDict可以让你像访问属性一样访问dict里的变量。
1. 问题
- d = {'foo':3, 'bar':{'x':1, 'y':2}}
- print(d['foo']) # 如何想要访问字典的元素需要这么写
- print(d['bar']['y']) # 如果想要继续访问字典中字典的元素需要使用二维数组
- # print(d.foo) 这样写会出错哦!
输出:
3
2
但是感觉这样太麻烦了,有没有更简单的方法使用字典了?
2. 解决方法
我们可以使用easydict模块!
- from easydict import EasyDict as edict
- easy = edict(d = {'foo':3, 'bar':{'x':1, 'y':2}}) # 将普通的字典传入到edict()
- print(easy['foo']) # 这是传统的方法
- print(easy.foo) # 这是我们使用easydict输出二者结果是一样的,但是可以更为方便的使用字典了
- print(easy.bar.x) # 我们也是可以很方便的使用字典中字典的元素了
输出:
3
3
1
3. Easydict的其他用法
3. 1.设置属性
- from easydict import EasyDict as edict
- d = edict() # 这个是输出{}
- d.foo = 3 # 我们可以直接赋值语句对字典元素进行创建
- d.bar = {'prob':'value'} # 另外我们也可以创建字典中的字典
- d.bar.prob = 'newer' # 另外我们也可以很方便的修改字典中元素的值
- print(d)
输出:
{'foo': 3, 'bar': {'prob': 'newer'}}
1
3.2 在深度学习中往往利用easydict建立一个全局的变量
- from easydict import EasyDict as edict
- config = edict()
- config.TRAIN = edict() # 创建一个字典,key是Train,值是{}
- config.Test = edict()
- # config.TRAIN = {} # 这个和上面的那句话是等价的,相当于创建一个字典的key
- config.TRAIN.batch_size = 25 # 然后在里面写值,表示Train里面的value也是一个字典
- config.TRAIN.early_stopping_num = 10
- config.TRAIN.lr = 0.0001
- print(config)
输出:
{'TRAIN': {'batch_size': 25, 'early_stopping_num': 10, 'lr': 0.0001}, 'Test': {}}
1
参考文章
---------------------
作者:alxe_made
来源:CSDN
原文:https://blog.csdn.net/alxe_made/article/details/80507415
版权声明:本文为博主原创文章,转载请附上博文链接!
python 中的 easydict的更多相关文章
- [转]Python中的str与unicode处理方法
早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...
- python中的Ellipsis
...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...
- python中的默认参数
https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...
- Python中的类、对象、继承
类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...
- python中的TypeError错误解决办法
新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...
- python中的迭代、生成器等等
本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...
- python2.7高级编程 笔记二(Python中的描述符)
Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...
- python cookbook 学习系列(一) python中的装饰器
简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...
- 用 ElementTree 在 Python 中解析 XML
用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...
随机推荐
- NodeJs>------->>第一章:Node.js介绍
一:章节前言 二:Node.js概述 1:使用node.js能够解决什么问题 2:实现高性能服务器 3:非阻塞型I/O及事件环形机制 4:node.js适合开发的程序 三:node.js安装 一.No ...
- 测试开发之Django——No5.Django项目的部署(CentOS7+nginx)
配置环境:CentOS7 1.安装python3环境 默认的CentOS7系统中,会安装python2.7的版本,由于Django2.0并不支持python2.7的版本,所以我们需要自己在系统中安装p ...
- C++ code:浮点数的比较(Floating-Pointing Number Comparison)
浮点数可以进行比较,但是浮点数由于表示精度在不同浮点数类型中的差异,所以会被误用.例如: #include <iostream> using namespace std; int main ...
- springMVC源码分析--页面跳转RedirectView(三)
之前两篇博客springMVC源码分析--视图View(一)和springMVC源码分析--视图AbstractView和InternalResourceView(二)中我们已经简单的介绍了View相 ...
- Math对象的常用属性和方法
属性 描述 Math.PI 返回π(3.1415926) 方法 描述 Math.round() 将数字四舍五入到离它最近的整数 Math.sart(n) 返回平方根,例如Math.sart(9)返回3 ...
- 基于 OSGi 的面向服务的组件编程,helloworld
基于 OSGi 的面向服务的组件编程 OSGi(Open Services Gateway Initiative,开放服务网关协议)提供了一个面向服务组件的编程模型,基于 OSGi 编程,具有模块化, ...
- 【BZOJ5110】[CodePlus2017]Yazid 的新生舞会
题解: 没笔的时候我想了一下 发现如果不是出现一半次数而是k次,并不太会做 然后我用前缀和写了一下发现就是维护一个不等式: 于是就可以随便维护了
- zjoi 2017 树状数组
题解: 感觉相比仙人掌简单了很多啊.. 首先会发现那个其实就是后缀和 然后其实就是判断一下两个位置的元素想不想等 然后l=1是要特判的 之后一个易错的地方就是去维护每个数是0/1的概率 因为这样概率是 ...
- 使用asp.net 2.0中的SqlBulkCopy类批量复制数据
介绍:在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个Sq ...
- POJ1417 True Liars 并查集 动态规划 (种类并查集)
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ1417 题意概括 有一群人,p1个好人,p2个坏人. 他们说了n句话.(p1+p2<=600,n ...