一个简单的方法,扁平化和取消扁平化的字典和列表

dotli的Python项目详细描述


多特利


Build StatusPyPI - Python VersionPyPIDownloads

又是一个扁平结构库

安装

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],}

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

推荐PyPI第三方库


热门话题
java将Scanner对象作为构造函数参数传递给UserInterface类   spring未能启动bean“subtocolWebSocketHandler”;嵌套的例外是java。lang.IllegalArgumentException:没有处理程序   Java EE应用程序中后台服务的多线程Java线程(设置守护进程和优先级)?   java Pull to refresh返回列表的第一个位置   无法将comparator类转换为java。可比的   java将json从servlet传递到dojo   JavaHibernate:将子类实例转换为超类实例   java警告调用servlet类时非法反射访问   java静态变量值   java@Entity和@embeddeble之间有什么区别   java将作业配置导入公共作业配置类(注释配置)   sql公共表表达式(以values语句开头)在java中给出错误   java在ImageJ中使用ImageProcessor   java PostgreSQL executeBatch()会随着时间的推移而变慢   java在安卓中以表格形式排列sqllite表数据?   java中SVG的swing定制呈现   java删除与另一个实体映射的实体   java何时/如何添加ListView适配器,使用back按钮恢复它?(片段)   java为什么IBinder和Binder之间的类型转换不是非法的?   java在方法参数列表中使用ArrayList或List