摘要这一篇主要介绍 python 中的 easydict 库,他可以帮助我们访问 python 中的 dict 中的元素可以像访问属性那样方便。
简介
在 python 中当我们需要访问字典中的元素的时候,我们需要使用类似 a['example']
的形式来进行使用。例如现在我们有如下的字典,
- d = {'foo':3, 'bar':{'x':1, 'y':2}}
- print(d['foo']) # 如何想要访问字典的元素需要这么写
- print(d['bar']['y']) # 如果想要继续访问字典中字典的元素需要使用二维数组
现在我们希望可以使用类似访问属性的方式,来访问字典里的变量,例如使用 d.foo
这种形式来访问。这个时候就可以使用 easydict 这个模块了。
参考资料
- python中的easydict模块使用
- 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