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

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
参考文章

  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. 转:Session,Token相关区别

    参考地址:https://www.cnblogs.com/xiaozhang2014/p/7750200.html 1. 为什么要有session的出现?答:是由于网络中http协议造成的,因为htt ...

  2. dispatchers 设置

    Oracle连接方式(dispatchers 设置) oracle 响应客户端请求有两种方式: 1 专有连接:用一个服务器进程响应一个客户端请求 2 共享连接:用一个分派器(dispatcher)响应 ...

  3. java中文GBK和UTF-8编码转换乱码的分析

    原文:http://blog.csdn.net/54powerman/article/details/77575656 作者:54powerman 一直以为,java中任意unicode字符串,可以使 ...

  4. java控制语句 if-else while do-while for return break continue goto switch default

    if for //: object/ForEachFloat.java package object; import java.util.Random; public class ForEachFlo ...

  5. django----Form扩展

    用第二种方式需要加上下面的这个: 三.判断用户民是不存在,存在就不添加了 from django.core.exceptions import ValidationError initial  修改时 ...

  6. 步步为营-35-SQL语言基础

    SQL 结构化查询语言(Structured Query Language) DDL DML DCL 在此不再对其进行详细解释 1 DDL 数据库定义语言 1.1 创建数据库脚本 --DDL crea ...

  7. ruby学习-字符串

    字符串 1.创建字符1:new用来创建新字符,empty?检验字符是否为空 title = String.new #=> "" title.empty? #=>true ...

  8. Chakra GC内存管理(未完)

    这一部分是我在网上找Chakra资料的时候偶然发现的zenhumany师傅在Hitcon2015上的议题<Microsoft Edge MemGC Internals>,感觉正好可以了解一 ...

  9. java -d

    DB_SERVER_URL="-Ddatasource.driver=oracle.jdbc.OracleDriver -Ddatasource.url=jdbc:oracle:thin:@ ...

  10. [转] 可跨域的单点登录(SSO)实现方案

    SSO简介 定义: 传统的单站点登录访问授权机制是:登录成功后将用户信息保存在session中,sessionId保存在cookie中,每次访问需要登录访问的资源(url)时判断当前session是否 ...