python - 展平其值具有嵌套字典列表的嵌套字典
问题描述
我有一个嵌套字典,其值可以包含嵌套字典列表 -
{ '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”的值。
解决方案
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'}]}
推荐阅读
- spring-boot - 多实体聚合事件处理不起作用
- javascript - Angular PWA 在发出 HTTP 请求之前等待应用程序缓存
- node.js - 重用 TypeORM 实体
- javascript - 如何让投影始终面朝下旋转物体
- powershell - 在 Azure DevOps 中使用 Powershell cmdlet
- java - 在 Android Java 中通过 WebView 读取 XHMTL 文件
- sqlalchemy - 将项目添加到表时出现 SQLAlchemy 错误
- reactjs - 删除 UI-kit 中网格的左右排列并做出反应
- configuration - 使用托管服务进行静态配置
- azure - Azure devops REST API 注释字段包含额外的 HTML 标记