Преобразование смешанного вложенного словаря в список - PullRequest
0 голосов
/ 18 июня 2020

У меня есть список вроде этого:

d1=  {'Hiraki': {'Hiraki_2': ['KANG_751']}, 'LakeTaupo': {'LakeTaupo_4': ['KANG_708', 'KANG_785'], 'LakeTaupo_6': ['KANG_785'], 'LakeTaupo_2': ['KANG_751', 'KANG_785', 'KANG_785', 'KANG_785'], 'LakeTaupo_3': ['KANG_669', 'KANG_669', 'KANG_708', 'KANG_708', 'KANG_669']}}

Я хотел бы преобразовать этот вложенный список во вложенный список, например:

d2= ['Hiraki': ['Hiraki_2': ['KANG_751']], 'LakeTaupo': ['LakeTaupo_4': ['KANG_708', 'KANG_785'], 'LakeTaupo_6': ['KANG_785'], 'LakeTaupo_2': ['KANG_751', 'KANG_785', 'KANG_785', 'KANG_785'], 'LakeTaupo_3': ['KANG_669', 'KANG_669', 'KANG_708', 'KANG_708', 'KANG_669']]]

Мой ниже python код делает не преобразовать словарь полностью в список:

list_key_value = [ [k,v] for k, v in d1.items() ]

Пожалуйста, помогите мне исправить это.

1 Ответ

2 голосов
/ 18 июня 2020

Обратите внимание, что ваш d1 является dict, а не списком, и что «вложенный список», который вы указываете в качестве желаемого результата, на самом деле не является допустимым синтаксисом. Словарь и список - это не одно и то же.

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

>>> def dict_to_list(d: dict) -> list:
...     if isinstance(d, list):
...         return d
...     if isinstance(d, dict):
...         return [[k, dict_to_list(v)] for k, v in d.items()]
...     return [d]
...
>>> d1=  {'Hiraki': {'Hiraki_2': ['KANG_751']}, 'LakeTaupo': {'LakeTaupo_4': ['KANG_708', 'KANG_785'], 'LakeTaupo_6': ['KANG_785'], 'LakeTaupo_2': ['KANG_751', 'KANG_785', 'KANG_785', 'KANG_785'], 'LakeTaupo_3': ['KANG_669', 'KANG_669', 'KANG_708', 'KANG_708', 'KANG_669']}}
>>> dict_to_list(d1)
[['Hiraki', [['Hiraki_2', ['KANG_751']]]], ['LakeTaupo', [['LakeTaupo_4', ['KANG_708', 'KANG_785']], ['LakeTaupo_6', ['KANG_785']], ['LakeTaupo_2', ['KANG_751', 'KANG_785', 'KANG_785', 'KANG_785']], ['LakeTaupo_3', ['KANG_669', 'KANG_669', 'KANG_708', 'KANG_708', 'KANG_669']]]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...