一个简单的方法,扁平化和取消扁平化的字典和列表
dotli的Python项目详细描述
多特利
又是一个扁平结构库
安装
pip install dotli
使用
压平
^{pr2}${'a.c':'val1','a.d':'val2','b.c':2,'b.d.key3':'val3','b.d.key4':'val4',}
可以配置分离器
data={'a':{'c':'d'},'b':{'e':'f'}}d=Dotli(separator='-')print(d.flatten(data))
{'a-c':'d','b-e':'f',}
它也可以扁平化列表以及列表和dicts的混合
data={'a':{'c':[1,2,3],'d':['e1','e2','e3'],},'b':'h'}d=Dotli()print(d.flatten(data))
{'a.c.0':1,'a.c.1':2,'a.c.2':3,'a.d.0':'e1','a.d.1':'e2','a.d.2':'e3','b':'h',}
列表索引可以用方括号括起来,以允许dict中的数字字符串作为键
data={'a':{'1':[1,2,3],'2':['e1','e2','e3'],},'b':'h'}d=Dotli(list_brackets=True)flat=d.flatten(data)orig=d.unflatten(flat)assertdata==origprint(flat)
{'a.1.[0]':1,'a.1.[1]':2,'a.1.[2]':3,'a.2.[0]':'e1','a.2.[1]':'e2','a.2.[2]':'e3','b':'h',}
如果dict不能被展平,包括到无效元素的路径,就会有一条很好的错误消息。在
fromdotli.errorsimportSeparatorInKeyErrordata={'a':{'b.b':1,},'b':'h'}try:Dotli().flatten(data)exceptSeparatorInKeyErrorase:print(e)
Separator "." is in key "b.b"! @ root.a
未固定
当列表中缺少元素时,Dotli将抛出一个错误
fromdotli.errorsimportIncompleteListErrordata={'a.0':0,'a.2':2,}try:d=Dotli()d.unflatten(data)exceptIncompleteListErrorase:print(e)
No entry for index "1" in list! @ a
但是,可以指定填充值 它将自动插入到缺少条目的列表中
data={'a.0':0,'a.2':2,}d=Dotli(fill_value_list=None)print(d.unflatten(data))
{'a':[0,None,2],}
- 项目
标签: