文章目录(Table of Contents)
简介
在 Python 中当我们需要访问字典中的元素的时候,我们需要使用类似 a['example']
的形式来进行使用。例如现在我们有如下的字典,
- d = {'foo':3, 'bar':{'x':1, 'y':2}}
- print(d['foo']) # 如何想要访问字典的元素需要这么写
- print(d['bar']['y']) # 如果想要继续访问字典中字典的元素需要使用二维数组
现在我们希望可以使用类似访问属性的方式,来访问字典里的变量,例如使用 d.foo
这种形式来访问。这个时候就可以使用 easydict 这个模块了。
参考资料
EasyDict 的使用介绍
首先导入 EasyDict
库。
- from easydict import EasyDict
接着我们将普通的字典传入 EasyDict
中去。
- test = {'foo':3, 'bar':{'x':1, 'y':2}}
- e_dict = EasyDict(test)
新建空的 dict
我们可以使用 d = Eastdict()
来创建一个新的 dict
。
获得元素
将字典类型传入 easydict 中之后,我们可以通过访问属性的方式来访问字典中的值。下面是一个简单的例子。
当然,这个也是支持使用原来的 dict 的方式来访问字典中的值。
增加元素
增加元素也可以使用直接使用赋值语句进行赋值,d.foo = 3
。
Easydict 转换为普通的 dict
有的时候我们需要将 easydict 转换为普通的 dict(例如使用 yaml.dump 进行保存的时候)。我们可以直接使用 dict
进行类型转换(推荐这一种方式),如下所示:
除了上面的方式之外,我们可以使用 json,首先利用 json.dumps 将 dict 转为字符串,接着使用 json.loads 将字符串转为 dict(方法二,没有上面的方式简洁)。通过这样将 easydict 转换为普通的 dict。我们看下面的例子:
- import json
- json.loads(json.dumps(e_dict))
最终的效果如下所示:
参考链接,How to convert an OrderedDict into a regular dict in python3
Easydict 的一些应用
利用 Easydict 建立全局变量
在深度学习的时候往往会使用 easydict 来建立一个全局变量。我们可以在其中设置 batchsize
,learning_rate
等参数。如下面的例子所示:
- config = EasyDict() # 创建一个空白的 dict
- config.Train = EasyDict()
- config.Test = EasyDict()
- config.Train.batch_size=25 # 设置 batchsize
- config.Train.lr = 0.001 # 设置学习率
- """
- {'Train': {'batch_size': 25, 'lr': 0.001}, 'Test': {}}
- """
利用 EasyDict 读取配置文件
同样,Easydict 还可以配合 yaml 配置文件一起使用。下面是一个简单的例子。
- import yaml
- from easydict import EasyDict
- def setup_config():
- with open(os.path.join('test_config.yaml')) as f:
- cfg = yaml.safe_load(f) # 读取配置文件
- cfg = EasyDict(cfg) # 存成 Easydict 的格式
- return cfg
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论