XBRL文档解析:大字典结构重构技术求助
针对XBRL字典结构转换的解决方案
根据你提供的代码和XBRL解析的常见场景,整理了几种符合需求的解决方案,你可以根据实际结构匹配选择:
场景1:将context_ref的所有键转为集合
你的初始代码问题在于循环时每次覆盖context_ref的值,最终只剩最后一个键。正确的写法是直接提取所有键转为集合:
for item in storage_gaap.values(): if 'context_ref' in item: # 把context_ref的键转换成集合 item['context_ref'] = set(item['context_ref'])
场景2:展开context_ref到外层字典(单context场景)
如果每个条目下的context_ref是单键字典(XBRL元素通常对应单个上下文),可以把上下文ID和详情展开到外层,删除原context_ref字段:
for item in storage_gaap.values(): if 'context_ref' in item: # 取出上下文ID和对应的详情数据 context_id, context_details = next(iter(item['context_ref'].items())) # 新增上下文ID字段 item['context_id'] = context_id # 把上下文详情合并到外层字典 item.update(context_details) # 删除原context_ref字段 del item['context_ref']
场景3:拆分多context条目为独立条目
如果context_ref包含多个上下文,需要将每个上下文对应为单独的条目:
new_storage = [] for item in storage_gaap.values(): if 'context_ref' in item: # 保留除context_ref外的基础字段 base_fields = {key: val for key, val in item.items() if key != 'context_ref'} # 遍历每个上下文,生成新条目 for ctx_id, ctx_data in item['context_ref'].items(): new_item = base_fields.copy() new_item['context_id'] = ctx_id new_item.update(ctx_data) new_storage.append(new_item) # 替换原字典为拆分后的列表(如果需要字典格式,可以再转为字典) storage_gaap = new_storage
如果以上方案都不符合你的预期,可以补充描述原字典单条目的具体格式(比如storage_gaap中某条的键值对)和预期的最终格式,这样能更精准地调整代码。
内容的提问来源于stack exchange,提问作者Boyan K
相关产品推荐
相关产品推荐

