Я хотел бы предложить вам сначала преобразовать его в структуру данных, как это:
topo = {
'm0' : {
'm1' : {},
'm2' : {},
'm3' : {},
},
}
То есть, вы сделали все значение ключа «имя» быть ключевым в словаре, и каждое значение ключ «children» будет значением для этого ключа и заменит его на словарь вместо списка.
Теперь вам не нужно заранее предполагать положение индекса, в котором находится м2. Вы должны знать, что m2 находится внутри m0, но тогда вы можете просто сказать
topo['m0']['m2']['ABC'] = {}
Вы можете конвертировать между форматами с этим кодом:
def verbose_to_compact(verbose):
return { item['name']: verbose_to_compact(item['children']) for item in verbose }
def compact_to_verbose(compact):
return [{'name':key, 'children':compact_to_verbose(value)} for key, value in compact]
Позвоните им, как это
compact_topo = verbose_to_compact([topo]) # function expects list; make one-item list
verbose_topo = compact_to_verbose(compact_topo)[0] # function returns list; extract the single item
Я предполагаю, что формат, который у вас есть, является прямой интерпретацией некоторого формата файла. Вы можете прочитать его таким образом, преобразовать его, работать с ним в компактном формате, а затем просто преобразовать его обратно, когда вам нужно снова записать его в файл.
В чем проблема? –
Если вы хотите добавить к iten не по индексу, а по имени использовать dict или OrderedDict вместо списка для детей – oleg