Python 中 EasyDict 的使用

  • A+
所属分类:Python库介绍
摘要这一篇主要介绍 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 这个模块了。

参考资料

 

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 中之后,我们可以通过访问属性的方式来访问字典中的值。下面是一个简单的例子。

Python 中 EasyDict 的使用

当然,这个也是支持使用原来的 dict 的方式来访问字典中的值。

Python 中 EasyDict 的使用

增加元素

增加元素也可以使用直接使用赋值语句进行赋值,d.foo = 3

Python 中 EasyDict 的使用

 

Easydict 转换为普通的 dict

有的时候我们需要将 easydict 转换为普通的 dict(例如使用 yaml.dump 进行保存的时候)。我们可以直接使用 dict 进行类型转换(推荐这一种方式),如下所示

Python 中 EasyDict 的使用

除了上面的方式之外,我们可以使用 json,首先利用 json.dumps 将 dict 转为字符串,接着使用 json.loads 将字符串转为 dict(方法二,没有上面的方式简洁)。通过这样将 easydict 转换为普通的 dict。我们看下面的例子:

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

最终的效果如下所示:

Python 中 EasyDict 的使用

参考链接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

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: