写在前面:当遇到一个陌生的python第三方库时,可以去pypi这个主页查看描述以迅速入门!

  1. import time
  1. dirtime

  

easydict的作用:可以使得以属性的方式去访问字典的值!

  1. >>> from easydict import EasyDict as edict
  2.  
  3. >>> d = edict({'foo':3, 'bar':{'x':1, 'y':2}})
  4.  
  5. >>> d.foo
  6.  
  7. 3
  8.  
  9. >>> d.bar.x
  10.  
  11. 1
  12.  
  13. >>> d = edict(foo=3)
  14.  
  15. >>> d.foo
  16.  
  17. 3

 解析json目录时很有

  1. >>> from easydict import EasyDict as edict
  2.  
  3. >>> from simplejson import loads
  4.  
  5. >>> j = """{
  6.  
  7. "Buffer": 12,
  8.  
  9. "List1": [
  10.  
  11. {"type" : "point", "coordinates" : [100.1,54.9] },
  12.  
  13. {"type" : "point", "coordinates" : [109.4,65.1] },
  14.  
  15. {"type" : "point", "coordinates" : [115.2,80.2] },
  16.  
  17. {"type" : "point", "coordinates" : [150.9,97.8] }
  18.  
  19. ]
  20.  
  21. }"""
  22.  
  23. >>> d = edict(loads(j))
  24.  
  25. >>> d.Buffer
  26.  
  27. 12
  28.  
  29. >>> d.List1[0].coordinates[1]
  30.  
  31. 54.9

  

也可以这样用
 
  1. >>> d = EasyDict()
  2.  
  3. >>> d.foo = 3
  4.  
  5. >>> d.foo
  6.  
  7. 3
  8.  
  9. >>> d = EasyDict(log=False)
  10.  
  11. >>> d.debug = True
  12.  
  13. >>> d.items()
  14.  
  15. [('debug', True), ('log', False)]
  16.  
  17. >>> class Flower(EasyDict):
  18.  
  19. ... power = 1
  20.  
  21. ...
  22.  
  23. >>> f = Flower({'height': 12})
  24.  
  25. >>> f.power
  26.  
  27. 1
  28.  
  29. >>> f['power']
  30.  
  31. 1

  


EasyDict可以让你像访问属性一样访问dict里的变量。

1. 问题

  1. d = {'foo':3, 'bar':{'x':1, 'y':2}}
  2. print(d['foo']) # 如何想要访问字典的元素需要这么写
  3. print(d['bar']['y']) # 如果想要继续访问字典中字典的元素需要使用二维数组
  4. # print(d.foo) 这样写会出错哦!

  

输出:

3
2

但是感觉这样太麻烦了,有没有更简单的方法使用字典了?

2. 解决方法
我们可以使用easydict模块!

  1. from easydict import EasyDict as edict
  2. easy = edict(d = {'foo':3, 'bar':{'x':1, 'y':2}}) # 将普通的字典传入到edict()
  3. print(easy['foo']) # 这是传统的方法
  4. print(easy.foo) # 这是我们使用easydict输出二者结果是一样的,但是可以更为方便的使用字典了
  5. print(easy.bar.x) # 我们也是可以很方便的使用字典中字典的元素了

  

输出:

3
3
1

3. Easydict的其他用法
3. 1.设置属性

  1. from easydict import EasyDict as edict
  2. d = edict() # 这个是输出{}
  3. d.foo = 3 # 我们可以直接赋值语句对字典元素进行创建
  4. d.bar = {'prob':'value'} # 另外我们也可以创建字典中的字典
  5. d.bar.prob = 'newer' # 另外我们也可以很方便的修改字典中元素的值
  6. print(d)

  

输出:

{'foo': 3, 'bar': {'prob': 'newer'}}
1
3.2 在深度学习中往往利用easydict建立一个全局的变量

  1. from easydict import EasyDict as edict
  2. config = edict()
  3. config.TRAIN = edict() # 创建一个字典,key是Train,值是{}
  4. config.Test = edict()
  5. # config.TRAIN = {} # 这个和上面的那句话是等价的,相当于创建一个字典的key
  6. config.TRAIN.batch_size = 25 # 然后在里面写值,表示Train里面的value也是一个字典
  7. config.TRAIN.early_stopping_num = 10
  8. config.TRAIN.lr = 0.0001
  9. print(config)

  

输出:

{'TRAIN': {'batch_size': 25, 'early_stopping_num': 10, 'lr': 0.0001}, 'Test': {}}
1
参考文章

  1. easydict官方网站
  2. ipython笔记

---------------------
作者:alxe_made
来源:CSDN
原文:https://blog.csdn.net/alxe_made/article/details/80507415
版权声明:本文为博主原创文章,转载请附上博文链接!

python 中的 easydict的更多相关文章

  1. [转]Python中的str与unicode处理方法

    早上被python的编码搞得抓耳挠腮,在搜资料的时候感觉这篇博文很不错,所以收藏在此. python2.x中处理中文,是一件头疼的事情.网上写这方面的文章,测次不齐,而且都会有点错误,所以在这里打算自 ...

  2. python中的Ellipsis

    ...在python中居然是个常量 print(...) # Ellipsis 看别人怎么装逼 https://www.keakon.net/2014/12/05/Python%E8%A3%85%E9 ...

  3. python中的默认参数

    https://eastlakeside.gitbooks.io/interpy-zh/content/Mutation/ 看下面的代码 def add_to(num, target=[]): tar ...

  4. Python中的类、对象、继承

    类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...

  5. python中的TypeError错误解决办法

    新手在学习python时候,会遇到很多的坑,下面来具体说说其中一个. 在使用python编写面向对象的程序时,新手可能遇到TypeError: this constructor takes no ar ...

  6. python中的迭代、生成器等等

    本人对编程语言实在是一窍不通啊...今天看了廖雪峰老师的关于迭代,迭代器,生成器,递归等等,word天,这都什么跟什么啊... 1.关于迭代 如果给定一个list或tuple,我们可以通过for循环来 ...

  7. python2.7高级编程 笔记二(Python中的描述符)

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  8. python cookbook 学习系列(一) python中的装饰器

    简介 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓 ...

  9. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

随机推荐

  1. NodeJs>------->>第一章:Node.js介绍

    一:章节前言 二:Node.js概述 1:使用node.js能够解决什么问题 2:实现高性能服务器 3:非阻塞型I/O及事件环形机制 4:node.js适合开发的程序 三:node.js安装 一.No ...

  2. 测试开发之Django——No5.Django项目的部署(CentOS7+nginx)

    配置环境:CentOS7 1.安装python3环境 默认的CentOS7系统中,会安装python2.7的版本,由于Django2.0并不支持python2.7的版本,所以我们需要自己在系统中安装p ...

  3. C++ code:浮点数的比较(Floating-Pointing Number Comparison)

    浮点数可以进行比较,但是浮点数由于表示精度在不同浮点数类型中的差异,所以会被误用.例如: #include <iostream> using namespace std; int main ...

  4. springMVC源码分析--页面跳转RedirectView(三)

    之前两篇博客springMVC源码分析--视图View(一)和springMVC源码分析--视图AbstractView和InternalResourceView(二)中我们已经简单的介绍了View相 ...

  5. Math对象的常用属性和方法

    属性 描述 Math.PI 返回π(3.1415926) 方法 描述 Math.round() 将数字四舍五入到离它最近的整数 Math.sart(n) 返回平方根,例如Math.sart(9)返回3 ...

  6. 基于 OSGi 的面向服务的组件编程,helloworld

    基于 OSGi 的面向服务的组件编程 OSGi(Open Services Gateway Initiative,开放服务网关协议)提供了一个面向服务组件的编程模型,基于 OSGi 编程,具有模块化, ...

  7. 【BZOJ5110】[CodePlus2017]Yazid 的新生舞会

    题解: 没笔的时候我想了一下 发现如果不是出现一半次数而是k次,并不太会做 然后我用前缀和写了一下发现就是维护一个不等式: 于是就可以随便维护了

  8. zjoi 2017 树状数组

    题解: 感觉相比仙人掌简单了很多啊.. 首先会发现那个其实就是后缀和 然后其实就是判断一下两个位置的元素想不想等 然后l=1是要特判的 之后一个易错的地方就是去维护每个数是0/1的概率 因为这样概率是 ...

  9. 使用asp.net 2.0中的SqlBulkCopy类批量复制数据

    介绍:在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个Sq ...

  10. POJ1417 True Liars 并查集 动态规划 (种类并查集)

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ1417 题意概括 有一群人,p1个好人,p2个坏人. 他们说了n句话.(p1+p2<=600,n ...