You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:55:42