【发布时间】:2020-04-15 15:25:36
【问题描述】:
我正在处理一个大型 xml 文件,我一直在尝试在其中提取键和值。此文件中的信息非常敏感,因此我无法分享。我从使用xml 库开始。然而,经过数小时的挫折后,我发现了xmltodict 库。我使用这个库将我的 xml 转换为字典(相对于 xml,我更熟悉的东西)。
import xmltodict
# convert xml to dictionary
dict_nested = xmltodict.parse(str_xml)
既然 xml 是一个字典,我想将它展平,因为它有大量的级别(我不知道有多少级别),同时创建帮助我跟踪路径到其对应值的键名.因此,我尝试了:
from flatten_dict import flatten
# flatten dict_nested
dict_flat = flatten(dict_nested)
结果可能看起来像这样,但层数更多:
{'ID': '123',
'info': [{'breed':'collie'},
{'fur': [{'short':'no'},
{'color':[{'black':'no'},
{'brown':'yes'}]}]}]}
这很好用,因为我的键是显示层路径的元组。我的值要么是字符串(即我正在寻找的最终结果),要么是 OrderedDict 类型的列表。
由于每个列表中的每个字典都需要展平,而且我不知道这有多深,我试图找出一种以编程方式展平所有字典的方法,直到所有键对应于单个值(即,不是列表或字典)。
理想情况下,输出应如下所示:
{'ID':'123',
'info_breed':'collie',
'info_fur_short':'no',
'info_fur_color_black':'no',
'info_fur_color_brown':'yes'}
很抱歉,由于敏感信息,我无法分享更多我的输出。
【问题讨论】:
-
您可以发布您的
dict_nested数据吗? -
dict_nested看起来类似于dict_flat,我认为扁平化dict_nested可能是不必要的。
标签: python xml dictionary ordereddictionary