У меня есть это весьма вложенная словарь дерево:Свести словарь словарей списков других словарей списков
sample = {"name": "one",
"id": "1",
"children": [{"name": "two",
"id": "2",
"children": [{"name": "six",
"id": "6",
"children": []},
{"name": "seven",
"id": "7",
"children": []}]},
{"name": "three",
"id": "3",
"children": []},
{"name": "four",
"id": "4",
"children": []},
{"name": "five",
"id": "5",
"children": []}]}
Это просто пример, в действительности есть 7 или 8 уровней списков детей .. Также каждое имя и идентификатор уникальны.
Моя цель состоит в том, чтобы сгладить это дерево в словарь, который имеет значение всех ключей имен в качестве ключей и их идентификаторы в качестве второго ключа пары значений:
sample = {"one": {"id":"1"},
"two": {"id":"2"},
"three": {"id": "3"}, ...}
На самом деле есть несколько пар ключ-значение, но Меня интересуют только имена и связанные с ними идентификаторы.
Я попытался обмотать голову, но мои навыки в рекурсиях не очень хорошие, было трудное время, поэтому я прошу вас о помощи. Также я искал аналогичные проблемы, но тот факт, что dicts инкапсулирован в списки, делает его не очень сопоставимым, для меня так или иначе ...
Я придумал решение для решения моей проблемы, но это был самый хакерский и уродливый код, который я каждый писал, и мне стыдно за это. В основном я преобразовал dict в его строковое представление и использовал regex, чтобы найти мои пары! И это плохо, но мне пришлось прототипировать что-то, чтобы успеть позаботиться о других проблемах ...
Итак, любые идеи, ребята?
Почему не просто '{ "один": "1" , "two": "2", ...} '? –
@tobias_k это также возможный выход. Но я не могу изменить дерево ввода, это дано и вызывает у меня головные боли. –
Обратите внимание, что у вас могут быть дубликаты ключей, которые переписывают данные, поэтому вам придется либо проверить это перед рукой, либо убедиться, что это не так с помощью исходного метода кодирования. Например, дети - это список словарей, поэтому нет ничего, чтобы ключи были уникальными. – Alexander