我有一个json数据集,其中每个项目/索引可以包含2个嵌套字典。问题是这些嵌套字典中的一个包含所有的键:值对作为其父字典。换句话说,我有一个父“帐户”,每当有“子帐户”时,它会将子帐户放置在嵌套字典中,它们永远不会被视为自己独立的项目/索引。
下面是一个item/index的json示例。本质上,我需要提取sub_accounts对象并使其成为自己的索引。如您所见,它包含的所有key:value对象与包含sub_accounts的父对象相同。
{
"classification": [
{
"classificationId": "Cash",
"taxonomyId": "accounting.gp"
}
],
"id": "235",
"kind": "Real",
"name": "Checking",
"sub_accounts": [
{
"classification": [
{
"classificationId": "Cash",
"taxonomyId": "accounting.gp"
}
],
"id": "236",
"kind": "Real",
"name": "Cash Reserve",
"sub_accounts": []
}
]
},
我已经能够使用json_normalize甚至.pop()的变体来完成数据的扁平化,我也尝试过探索其他扁平化选项,但在我试图完成的特定任务上没有运气。这些解决方案通常只是导致子帐户仍然与原始索引相关联。
2条答案
按热度按时间flvlnr441#
您可以使用递归函数遍历层次结构,同时逐步弹出“sub_accounts”键:
从帐户对象列表中:
输出:
ar7v8xwq2#
我没有一个通用的答案,但这似乎做你需要的:
当你有嵌套的结构时,你需要嵌套你的循环。另一个答案是递归,如果你嵌套了超过一千个递归调用,这可能会导致问题(所以可能不是这种情况)我还假设您关心顺序,希望父ID放在第一位,而且,如果您试图从json中删除
sub_accounts
,那么您可能希望从记录中弹出它,但我再次假定,这种结构应予以保留。