easydict库的用法以及改进型Easydict
生活随笔
收集整理的這篇文章主要介紹了
easydict库的用法以及改进型Easydict
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)、在python中使用字典可以很方便的查看屬性,但是字典遍歷的方法不是那么方便,因此python提供了快速遍歷字典的方法。
dict1 = {'num1':1,'num2':2} print(dict1['num1']) #以上為普通的字典的遍歷方法,這種遍歷在應用的時候不是很方便,查找屬性必須按照列表的方法進行查找 from easydict import EasyDict as edict dict1 = {'num1':1,'num2':2} dict2 = edict(dict1) #dict2就可以按照方式dict2.num1進行訪問(2)以下用法:
from easydict import EasyDict as edict#注意,這里的mn和cfg的值永遠都是一樣的!!!!!!!!! #不管用哪個的值增加,另外一個都會變!!!!!! mn = edict() cfg = mnmn.TRAIN = edict() mn.TRAIN.LEARNING_RATE = 0.001 mn.TRAIN.MOMENTUM = 0.9 mn.TRAIN.GAMMA = 0.1 mn.TRAIN.STEPSIZE = 50000 mn.TRAIN.DISPLAY = 10 mn.IS_MULTISCALE = Falseprint(mn) print(cfg) print(cfg.TRAIN) print(cfg.TRAIN.DISPLAY) print(mn.TRAIN.MOMENTUM)(3)改進型Easydict
class EasyDict(dict):"""Get attributes>>> d = EasyDict({'foo':3})>>> d['foo']3>>> d.foo3>>> d.barTraceback (most recent call last):...AttributeError: 'EasyDict' object has no attribute 'bar'Works recursively>>> d = EasyDict({'foo':3, 'bar':{'x':1, 'y':2}})>>> isinstance(d.bar, dict)True>>> d.bar.x1Bullet-proof>>> EasyDict({}){}>>> EasyDict(d={}){}>>> EasyDict(None){}>>> d = {'a': 1}>>> EasyDict(**d){'a': 1}Set attributes>>> d = EasyDict()>>> d.foo = 3>>> d.foo3>>> d.bar = {'prop': 'value'}>>> d.bar.prop'value'>>> d{'foo': 3, 'bar': {'prop': 'value'}}>>> d.bar.prop = 'newer'>>> d.bar.prop'newer'Values extraction>>> d = EasyDict({'foo':0, 'bar':[{'x':1, 'y':2}, {'x':3, 'y':4}]})>>> isinstance(d.bar, list)True>>> from operator import attrgetter>>> map(attrgetter('x'), d.bar)[1, 3]>>> map(attrgetter('y'), d.bar)[2, 4]>>> d = EasyDict()>>> d.keys()[]>>> d = EasyDict(foo=3, bar=dict(x=1, y=2))>>> d.foo3>>> d.bar.x1Still like a dict though>>> o = EasyDict({'clean':True})>>> o.items()[('clean', True)]And like a class>>> class Flower(EasyDict):... power = 1...>>> f = Flower()>>> f.power1>>> f = Flower({'height': 12})>>> f.height12>>> f['power']1>>> sorted(f.keys())['height', 'power']"""def __init__(self, d=None, **kwargs):if d is None:d = {}if kwargs:d.update(**kwargs)for k, v in d.items():setattr(self, k, v)# Class attributesfor k in self.__class__.__dict__.keys():if not (k.startswith('__') and k.endswith('__')):setattr(self, k, getattr(self, k))def __setattr__(self, name, value):if isinstance(value, (list, tuple)):def get_EasyDict_list(value):return [EasyDict(x) if isinstance(x, dict) else x if not isinstance(x, (list, tuple)) else get_EasyDict_list(x) for x in value]value = get_EasyDict_list(value)else:value = EasyDict(value) if isinstance(value, dict) else valuesuper(EasyDict, self).__setattr__(name, value)self[name] = valuedef __getattr__(self, name):"""如果 key 不存在返回 None"""try:return super(EasyDict, self).__getattr__(name)except AttributeError:try:return self[name]except KeyError:key = name or ""if key.startswith('__') and key.endswith('__'):raise AttributeErrorreturn None總結
以上是生活随笔為你收集整理的easydict库的用法以及改进型Easydict的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速做思维导图简单操作教程
- 下一篇: Springboot+web3j(4.7