又一个属性dict实现!

Attr-Dict的Python项目详细描述


属性dict

又一个属性dict实现!

这个包提供了一个具有对键的属性访问的字典。在处理深度嵌套的数据时特别方便。(创意来自https://github.com/otsaloma/attd

不同的实现基于OrderedDict

  • strictAttrDict
    使用类属性语法作为字典。有些键不能转换为属性(如int),在这种情况下,将恢复为常用的dict语法(即dict[key])。

  • lazyLazyAttrDict
    基于attrdict,但对于缺少的键和掩码值(repr()上的键列表)不返回任何值。

  • 受限RestrictedAttrDict
    惰性属性字典仅强制从字典语法更改值(setitem&delitem)和屏蔽值(repr()上的键的返回列表)。

    将在属性更改(setattr或delattr)时引发attributeRor以模拟@property属性。

基本用法:

# Some dict>>>conf_A={'a':1,'b':2,'c':3}>>>conf_B={'a':11,'b':12,'c':{'c1':13,'c2':23}}# import library>>>fromattr_dictimportAttrDict,LazyAttrDict,RestrictedAttrDict## Create a Lazy Attribute Dict>>>lad=LazyAttrDict()# Add some data (using different syntax)>>>lad.A=conf_A>>>lad['B']=conf_B# or>>>lad.update(dict(A=conf_A,B=conf_B))# Access data>>>lad{'A':{'a':1,'b':2,'c':3},'B':{'a':11,'b':12,'c':{'c1':13,'c2':23}}}>>>lad.A{'a':1,'b':2,'c':3}>>>lad.A.c3>>>lad['A']['c']3>>>'c'inlad.ATrue

其他功能:

# Export to JSON>>>json_data=lad.to_json()>>>print(json_data){"A":{"a":1,"b":2,"c":3},"B":{"a":11,"b":12,"c":{"c1":13,"c2":23}}}## Import JSON to a new Attribute Dict>>>new_ad=AttrDict().from_json(json_data)>>>print(new_ad)AttrDict([('A',AttrDict([('a',1),('b',2),('c',3)])), \
('B',AttrDict([('a',11),('b',12),('c',AttrDict([('c1',13),('c2',23)]))]))])## Use Restricted Attribute Dict>>>rad=RestrictedAttrDict()# Add data using dict syntax (setitem)>>>rad['A']={}>>>rad['A']['a']=1>>>fork,vinconf_A.items():...rad['A'][k]=v...# Data access to values is restricted>>>rad['A']>>>rad.A['a','b','c']>>>rad.A.b2>>>dict(rad.A){'a':1,'b':2,'c':3}# Attributes are protected>>>rad.A=conf_A# doctest: +ELLIPSISTraceback(mostrecentcalllast):...AttributeError:can't set attribute>>>rad.A.b=0# doctest: +ELLIPSISTraceback(mostrecentcalllast):...AttributeError:can't set attribute>>>delrad.A.b# doctest: +ELLIPSISTraceback(mostrecentcalllast):...AttributeError:can't delete attribute# Use dict syntax to change or delete>>>rad.A['b']=0>>>rad.A.pop('b')0# Missing key return None>>>print(rad.A.b)None>>>'b'inrad.AFalse

名为“indexes”的相关接口也可用于管理具有这些属性字典的任何一组对象:
AttrIndexLazyIndexRestrictedIndex
(当前的实现仅在两个级别上有效)

索引用法:

# Import & init>>>fromattr_dictimportLazyIndex>>>x=LazyIndex()# set keys & args>>>x.set_arg('A',a=1,b=2,c=3)>>>x.set_key('B')>>>x.index{'A':{'a':1,'b':2,'c':3},'B':{}}# get, del & check>>>x.get_key('A'){'a':1,'b':2,'c':3}>>>x.get_arg('A','b')2>>>x.del_arg('A','c')>>>x.get_key('A'){'a':1,'b':2}>>>x.check_arg('A','b',2)True

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么这一行是charg=(char)(br.read());被跳过?   java三重DES中的IV在哪里?   java Lombok注释不在Intellij idea下编译   java为什么我不能使用过滤器作为流中的最后一步   sqlite Java编译错误找不到符号方法next()   在Java中解析处理对int来说太大的数字   java摄像头不工作   java是“断言错误”好的做法?   java确定api请求是来自CURL还是POSTMAN?   JavaSpringMVC导航   java使单例模式代码更强大   当Java(解释器)区分大小写时,为什么Java编译器(javac)不区分大小写?   java注释字符串[]oneArr();vs字符串[][]twoArr();公告   java命名查询的利弊   java使用log4jweb在web应用程序中配置Log4j2。罐子   java正则表达式查找以开头和结尾的所有可能出现的文本~   java从字符串执行方法