我有一个嵌套的字典,其值可以包含嵌套字典的列表-
{ 'kw' : [{'@name': 'A',
'library': 'A1',
'kw' : [{ '@name': 'B', 'lib': 'B1',
'kw': [{ '@name': 'C' , 'extra' : 'C1'}],
'status': 'Fail'
}],
'status': 'Pass'
}]
}
我希望输出为-
{ 'kw' : [{ '@name' : 'A',
'library' : 'A1',
'status' : 'Pass'
},
{ '@name' : 'B'
'lib' : 'B1',
'status': 'Fail',
'ref_kw_name': 'A'
},
{ '@name': 'C'
'extra': 'C1',
'ref_kw_name' : 'B'
}]
在输出中,数据处于扁平的浅层结构中。字典的内部嵌套列表将包含“ ref_kw_name”,其值为父键“ @name”的值。
答案 0 :(得分:1)
input_dict = {'kw': [{'@name': 'A',
'library': 'A1',
'kw': [{'@name': 'B', 'lib': 'B1',
'kw': [{'@name': 'C', 'extra': 'C1'}],
'status': 'Fail'
}],
'status': 'Pass'
},
{'@name': 'AA',
'library': 'AA1',
'kw': [{'@name': 'BB', 'lib': 'BB1',
'kw': [{'@name': 'CC', 'extra': 'CC1'}],
'status': 'Fail'
}],
'status': 'Pass'
}]
}
output_list = []
for item in input_dict['kw']:
flatten = [item]
done = False
while not done:
try:
ref_kw_name = flatten[-1]['@name']
data = flatten[-1]['kw']
data[0]['ref_kw_name'] = ref_kw_name
del flatten[-1]['kw']
flatten += data
except KeyError:
done = True
output_list += flatten
output = {'kw': output_list}
输出
{'kw': [{'@name': 'A', 'library': 'A1', 'status': 'Pass'},
{'@name': 'B', 'lib': 'B1', 'status': 'Fail', 'ref_kw_name': 'A'},
{'@name': 'C', 'extra': 'C1', 'ref_kw_name': 'B'},
{'@name': 'AA', 'library': 'AA1', 'status': 'Pass'},
{'@name': 'BB', 'lib': 'BB1', 'status': 'Fail', 'ref_kw_name': 'AA'},
{'@name': 'CC', 'extra': 'CC1', 'ref_kw_name': 'BB'}]}