我建议你先把它转换成这样的数据结构:
topo = {
'm0' : {
'm1' : {},
'm2' : {},
'm3' : {},
},
}
也就是说,您已将“name”键的每个值都设为字典中的键,将“children”键的每个值设为该键的值,并将其更改为字典而不是列表。
现在您不需要预先假设找到 m2 的索引位置。您确实需要知道 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
我假设您拥有的格式是对某些文件格式的直接解释。您可以以这种方式阅读它,对其进行转换,以紧凑格式使用它,然后在需要再次将其写入文件时将其转换回来。