im, создавая функцию, которая будет обрабатывать данные xml, данные могут меняться, но структура одинакова:
события (список как) мероприятие Информация Дополнительная информация
функция должна создать словарь, содержащий сопоставление, в котором, если зацикливаемые данные не являются 0, тогда данные должны быть сопоставлены в словаре, это мое решение:
def parse_items(self, xml):
""" Builds a dynamic dictionary tree wich holds each event in a dictionary
that can be accessed by number of event """
parsed_items = {}
parsed_item = {}
sub_info = {}
for num, item in enumerate(xml):
for tag in item:
if len(tag) != 0:
for info in tag:
sub_info[info.tag] = info.text
parsed_item[tag.tag] = sub_info
# Need to flush the dictionary else it will repeat info
sub_info = {}
else:
parsed_item[tag.tag] = tag.text
parsed_items[num] = parsed_item
# Need to flush the dictionary else it will repeat info
parsed_item = {}
return parsed_items
Мой вопрос в том, есть ли способ сделать это динамически без необходимости создавать циклы для каждого уровня данных?
(Отправляясь как ответ, потому что вопросник намерен использовать эту идею)
В последних версиях Python существуют понятий dict, а также понимание списков. Вот так:
sub_info = {i.tag: i.text for i in tag}
dict(((i.tag, i.text) for i in tag))