使用点路径表示法访问dict和list。

dotted的Python项目详细描述


虚线

Latest Versionhttps://travis-ci.org/carlosescri/DottedDict.svg?branch=master

一个python库,它提供了一种访问列表和dict的方法。 点路径符号。在一个复杂的系统中访问一条深路径是有用的 由列表和听写组成的对象。

快&脏:

fromdotted.collectionimportDottedCollection,DottedDict,DottedListobj=DottedCollection.factory(dict_or_list)obj=DottedCollection.load_json(json_value)obj=DottedDict(a_dict)obj=DottedList(a_list)fromdotted.utilsimportdot,dot_jsonobj=dot(dict_or_list)obj=dot_json(json_value)

DottedDictDottedList具有与dict和^{tt4}相同的访问器$ 所以你可以像往常一样重复它们。两种类型的对象都支持通过 虚线路径键。

示例

示例1:dottedlist

obj=DottedList([0,1,2,3,[4,5,6],7,8,[9,10]])

所有这些都是真的:

obj[0]==0obj['1']==1obj['4.0']==4obj['4.2']==6obj[5]==7obj['7.1']==10

如果要附加,可以执行以下操作:

obj.append(12)

或:

obj[8]=11

但后者仅在index == len(obj)时有效。否则你会得到 非常例外。

示例2:dotteddict

obj=DottedDict({'hello':{'world':{'wide':'web'}}})

所有这些都是真的:

obj['hello']=={'world':{'wide':'web'}}obj['hello.world']=={'wide':'web'}obj['hello.world.wide']=='web'obj.hello=={'world':{'wide':'web'}}obj.hello.world=={'wide':'web'}obj.hello.world.wide=='web'

例3:两者共同工作

obj=DottedCollection.factory({'hello':[{'world':{'wide':['web','web','web']}}]})

您可以访问:

obj['hello'][0]['world']['wide'][0]obj.hello[0].world.wide[0]obj.hello[0].world['wide'][0]obj.hello[0].world['wide.0']obj.hello['0.world'].wide[0]...obj['hello.0.world.wide.0']

示例4:当新值是dict或list

obj=DottedCollection.factory(some_obj)obj['some.path']={'hello':'world'}# will be converted to a DottedDictobj['another.path']=['hello']# will be converted to a DottedList

示例5:快捷方式

fromdotted.utilsimportdot,dot_jsonobj=dot({'hello':'world'})obj=dot_json('{"hello": "world"}')

例6:内有圆点的钥匙!

实际上,您可以使用转义密钥,但最好避免它们:

fromdotted.utilsimportdot,dot_jsonobj=dot({"hello\.world":"Hello!"})obj=dot_json('{"hello\\\\.world": "Hello!"}')value=obj["hello\.world"]# Hello!

就这些!

测试

从父目录在终端中运行:

python -m dotted.test.test_collection

特别感谢

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

推荐PyPI第三方库


热门话题
java如何在表被注释到配置之前获取表的元数据?   java滚动条不会出现在JList上   java JOGL监视器GPU内存   java为什么要使用RecyclerView onDraw延迟   java定制Oppo Reno 2 Z CPH1951(手机型号)的固件(闪存文件)   java自定义线程池执行器   java如何解决发布版本中重复的jar条目[com/安卓/volley/R.class]?   java如何使用Bukkit API触发事件?   java在blazemeter jmeter RTE插件中使用ctrl+w输入   C#/Visual Studio的java JDT等价物   java为什么当maxread值很大而收到的消息数量很小时,卡夫卡消费者会无限期消费?   java游戏2。x:包含模板列表的绑定模型   带压缩的java日志旋转   运行时。exec用java运行程序读取它正在做什么