zoukankan      html  css  js  c++  java
  • python 中的 easydict

     

    写在前面:当遇到一个陌生的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
    版权声明:本文为博主原创文章,转载请附上博文链接!



  • 相关阅读:
    阅读任务-阅读笔记-4
    阅读任务-阅读提问-3
    阅读任务-阅读笔记-3
    阅读任务-阅读提问-2
    阅读任务-阅读提问-1
    构建之法:现代软件工程-阅读笔记1
    个人编程作业1-GIT应用
    《构建之法:现代软件工程-阅读笔记》
    课后作业-阅读任务-阅读提问-1
    结对编程项目作业5
  • 原文地址:https://www.cnblogs.com/sddai/p/10423277.html
Copyright © 2011-2022 走看看