Python如何将嵌套JSON字典提取为独立索引项?
提取嵌套sub_accounts为独立索引项的解决方案
要将所有层级的sub_accounts嵌套对象提取为独立的索引项,递归遍历是最直接的方案,能处理任意深度的嵌套结构,且完全剥离子账户与父账户的关联。
核心思路
- 遍历每个账户对象,先将当前账户作为独立条目加入结果列表
- 取出当前账户的
sub_accounts列表,对每个子账户递归执行相同操作 - 将递归得到的子账户结果合并到总列表中
代码实现
def extract_accounts(account): # 复制当前账户对象,避免修改原始数据 current_account = account.copy() # 取出子账户列表(若不存在则返回空列表) sub_accounts = current_account.pop('sub_accounts', []) # 初始化结果列表,先加入当前账户 result = [current_account] # 递归处理每个子账户,合并结果 for sub_acc in sub_accounts: result.extend(extract_accounts(sub_acc)) return result # 修正后的示例数据 sample_account = { "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": [] } ] } # 提取所有独立账户 all_independent_accounts = extract_accounts(sample_account) print(all_independent_accounts)
处理多顶级账户场景
如果原始数据是包含多个顶级账户的列表,只需遍历每个账户并合并结果:
# 假设有多个顶级账户的列表 account_list = [sample_account, another_top_level_account] all_accounts = [] for acc in account_list: all_accounts.extend(extract_accounts(acc))
说明
- 该方案会自动移除每个账户对象中的
sub_accounts字段(若需要保留该字段,删除current_account.pop('sub_accounts', [])这一行即可) - 递归逻辑支持任意深度的嵌套子账户,无论有多少层子账户都能被提取为独立条目
- 与
json_normalize或简单pop的区别:前者会保留父级关联,后者仅能处理一层嵌套,递归方案彻底剥离关联且支持全层级提取
内容的提问来源于stack exchange,提问作者Srichard90
相关产品推荐
相关产品推荐

