Подобные структуры dict и финальная структура для написания парсера - PullRequest
0 голосов
/ 08 февраля 2019

Я должен написать парсер.Все xml-файлы, которые я получил, конвертируются в python dicts (около 10 тыс.).Теперь они имеют общую структуру, но у многих из них есть несколько различных подструктур.Как я могу прочитать все ключи из всех диктовок и объединить их в одну окончательную структуру, чтобы иметь представление о том, какие ключи существуют?Они представляют собой комбинацию dict, array, str и я попытались:

for x in dict.keys():
    print(x)

Но как объединить их в один окончательный обзор всех ключей всех dicts?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Я немного поиграл, и все заработало, это комбинация python + linux, но при небольшом программировании это мог быть только python.Если кому-то интересно, и у меня возникла такая же проблема, вот мой код, если у вас есть улучшения, пожалуйста, ответьте на него, так как я очень заинтересован:

def build_summary_dict(indicator, number, before_key):
    if type(indicator) is dict:
        for key in indicator.keys():
            if len(before_key) < 1:
                print(key)
                build_summary_dict(indicator[key], number+1, key)
            else:
                print('    '*number + before_key + ':' + key)
                build_summary_dict(indicator[key], number+1, before_key + ':' + key)
    if type(indicator) is list:
        for i in indicator:
            build_summary_dict(i, number, before_key + '[]')

Мой единственный вывод получен из этой команды, а затем я выполняю в Linux:

python3.6 myprogram.py | sort | uniq

теперь у меня есть список всего, что я хотел, без этого я бы наблюдал за многими вещами при разборе

, вы можете запустить это без сортировки и uniq, чтобы получить выводкаждого отдельного отдельного элемента

С уважением

0 голосов
/ 08 февраля 2019

При условии, что у вас есть следующие диктовки:

a = {'id': 'asdf', 'title': 'jkl'}
b = {'id': 'asdf', 'title': 'jkl', 'products': [{'value': 'brush'}]}

Вы можете объединить их следующим образом:

def merge_two_dicts(x, y):
    z = x.copy()
    z.update(y)
    return z

print(merge_two_dicts(a, b))
>>> 'id': 'asdf', 'title': 'jkl', 'products': [{'value': 'brush'}]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...