Я работаю с большим файлом 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'}
Извините, что не могу поделиться большей частью своих результатов из-за конфиденциальной информации.