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

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的测试   java如何编写在请求体中接受XML的swagger API   java PrimeTable面临奇怪的错误   java如何检查数组中输入的用户是否为回文?   java如何删除JButton中文本周围的框?   java阻止直接访问JSF2中的xhtml文件   java如何获取定义方法的类的名称?   while loop如何让用户只需输入数字,然后在Java中重试?   从应用程序注册中列出azure存储帐户容器时,java受众验证失败   Java线程之间的多线程数据交换   java检查数组中是否存在重复的索引值?   java正则表达式从字符串中复制第二个URL   java如何从gradle项目依赖项中排除METAINF?   java如何将JLabel[]添加到JTable?   使用kotlin播放java音频(位于internet上的文件)