создать JSON из списка списков с несколькими уровнями вложенности - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть список строк, содержащих элементы, разделенные точками, и каждый элемент справа является дочерним элементом элемента слева.Например: (element0.element1.element2) element2 является дочерним элементом element1, который является дочерним элементом element0 (element0 (element1 (element2))).Но число дочерних элементов может измениться, и я хочу, чтобы был способ присоединиться к дочерним элементам, поэтому в итоге будет вложенная структура, похожая на дерево.

Я могу преобразовать список строк в список, подобный этому:

[0, [1, [0]]]
[0, [1, [1]]]
[0, [2, [0]]]
[0, [3]]
[1, [0]]

Или словарь, подобный следующему:

{0, {1, {0}}}
{0, {1, {1}}}
{0, {2, {0}}}
{0, {3}}
{1, {0}}

Мне нужно что-то вроде этого:

{
"0": {
    "1": {"0", "1"},
    "2": {"0"},
    "3": {}
    },
"1": {"0"}
}

Просто используйте d.update () для каждого элементасписок не работает, так как следующий элемент может перезаписать текущий.Использование d [elem0] = elem1 не работает, потому что я не могу сначала инициализировать всех родителей, чтобы потом добавить потомков.

1 Ответ

0 голосов
/ 12 марта 2019

На вопрос ответил u / timbledum on reddit :

Ваш пример вывода невозможен, так как вы не можете иметь ключи без значений.Однако, если вы просто поместите None в качестве заполнителя, вы можете сделать что-то вроде этого (я уверен, что есть лучший способ сделать это, но это работает):

>>> data = [
... '0.1.0',
... '0.1.1',
... '0.2.0',
... '0.3',
... '1.0',
... ]
>>> data_split = [row.split(".") for row in data]
>>> data_split
[['0', '1', '0'], ['0', '1', '1'], ['0', '2', '0'], ['0', '3'], ['1', '0']]
>>> output = {}
>>> for row in data_split:
...     current_dict = output
...     keys = row[:-1]
...     value = row[-1]
...     for key in keys:
...         if key not in current_dict:
...             current_dict[key] = {}
...         current_dict = current_dict[key] 
...     current_dict[value] = None
...     
>>> pprint(output, width=2)
{'0': {'1': {'0': None,
            '1': None},
    '2': {'0': None},
    '3': None},
'1': {'0': None}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...