菜鸟笔记
提升您的技术认知

python 中 easydict 的使用-ag真人游戏

摘要这一篇主要介绍 python 中的 easydict 库,他可以帮助我们访问 python 中的 dict 中的元素可以像访问属性那样方便。

简介

在 python 中当我们需要访问字典中的元素的时候,我们需要使用类似 a['example'] 的形式来进行使用。例如现在我们有如下的字典,

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

现在我们希望可以使用类似访问属性的方式,来访问字典里的变量,例如使用 d.foo 这种形式来访问。这个时候就可以使用 easydict 这个模块了。

参考资料

  • python中的easydict模块使用
  • easydict 官方介绍

 

easydict 的使用介绍

首先导入 easydict 库。

  1. from easydict import easydict

接着我们将普通的字典传入 easydict 中去。

  1. test = {'foo':3, 'bar':{'x':1, 'y':2}}
  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。我们看下面的例子:

  1. import json
  2. json.loads(json.dumps(e_dict))

最终的效果如下所示:

参考链接,how to convert an ordereddict into a regular dict in python3

 

easydict 的一些应用

利用 easydict 建立全局变量

在深度学习的时候往往会使用 easydict 来建立一个全局变量。我们可以在其中设置 batchsizelearning_rate 等参数。如下面的例子所示:

  1. config = easydict() # 创建一个空白的 dict
  2. config.train = easydict()
  3. config.test = easydict()
  4. config.train.batch_size=25 # 设置 batchsize
  5. config.train.lr = 0.001 # 设置学习率
  6. """
  7. {'train': {'batch_size': 25, 'lr': 0.001}, 'test': {}}
  8. """

 

利用 easydict 读取配置文件

同样,easydict 还可以配合 yaml 配置文件一起使用。下面是一个简单的例子。

  1. import yaml
  2. from easydict import easydict
  3. def setup_config():
  4.     with open(os.path.join('test_config.yaml')) as f:
  5.         cfg = yaml.safe_load(f) # 读取配置文件
  6.     cfg = easydict(cfg) # 存成 easydict 的格式
  7.     return cfg

 

网站地图