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

如何将Python字典按PDF文件名分组转换为嵌套字典?

问题描述

我有如下Python字典:

ip_dict = {
    "img_folder/144-64ee3d9bb7-3.png": "COMMERCIAL PROPERTY ",
    "img_folder/144-64ee3d9bb7-2.png": "CBIC COMMERCIAL ",
    "img_folder/144-64ee3d9bb7-4.png": "CBIC COMMERCIAL GENERAL",
    "img_folder/144-64ee3d9bb7-1.png": "Contractors Bonding",
    "img_folder/144-64ee3d9bb7-5.png": "CBIC",
    "img_folder/Excess-Liability-8.png": "  Energy laswance ",
    "img_folder/144-64ee3d9bb7-0.png": "CONTRACTORS BONDING AND INSURANCE ",
    "img_folder/Excess-Liability-10.png": "  FOLLOWING FORM",
    "img_folder/Excess-Liability-14.png": "  (2) property and",
    "img_folder/Excess-Liability-0.png": "  Energy ",
    "img_folder/Excess-Liability-5.png": "  The additional premium",
    "img_folder/Excess-Liability-3.png": "Ein Enos asurance Maral",
    "img_folder/Excess-Liability-4.png": "  IV. Conditions ",
    "img_folder/Excess-Liability-13.png": "  FOLLOWING FORM ",
    "img_folder/Excess-Liability-12.png": "  FOLLOWING FORM EXCESS",
    "img_folder/Excess-Liability-9.png": "  Surplus Lines",
    "img_folder/Excess-Liability-11.png": "  ALL OTHER TERMS",
    "img_folder/Excess-Liability-2.png": "  Il. Limit of",
    "img_folder/Excess-Liability-6.png": "  (G) Notice of",
    "img_folder/Excess-Liability-7.png": "Ss So Ss   The ",
    "img_folder/Excess-Liability-1.png": "eee ee ee"
}

该字典存储了从两个不同PDF文件(144-64ee3d9bb7和Excess-Liability)的页面提取的文本。需要将其转换为嵌套字典:外层键为PDF文件名,内层为对应原字典中的条目,预期输出如下:

op_dict = {
    "144-64ee3d9bb7.png": {
    "img_folder/144-64ee3d9bb7-3.png": "COMMERCIAL PROPERTY ",
    "img_folder/144-64ee3d9bb7-2.png": "CBIC COMMERCIAL ",
    "img_folder/144-64ee3d9bb7-4.png": "CBIC COMMERCIAL GENERAL",
    "img_folder/144-64ee3d9bb7-1.png": "Contractors Bonding",
    "img_folder/144-64ee3d9bb7-5.png": "CBIC",
    "img_folder/144-64ee3d9bb7-0.png": "CONTRACTORS BONDING AND INSURANCE "
    },
    "Excess Liability.png": {
    "img_folder/Excess Liability-8.png": "  Energy laswance ",
    "img_folder/Excess Liability-10.png": "  FOLLOWING FORM",
    "img_folder/Excess Liability-14.png": "  (2) property and",
    "img_folder/Excess Liability-0.png": "  Energy ",
    "img_folder/Excess Liability-5.png": "  The additional premium",
    "img_folder/Excess Liability-3.png": "Ein Enos asurance Maral",
    "img_folder/Excess Liability-4.png": "  IV. Conditions ",
    "img_folder/Excess Liability-13.png": "  FOLLOWING FORM ",
    "img_folder/Excess Liability-12.png": "  FOLLOWING FORM EXCESS",
    "img_folder/Excess Liability-9.png": "  Surplus Lines",
    "img_folder/Excess Liability-11.png": "  ALL OTHER TERMS",
    "img_folder/Excess Liability-2.png": "  Il. Limit of",
    "img_folder/Excess Liability-6.png": "  (G) Notice of",
    "img_folder/Excess Liability-7.png": "Ss So Ss   The ",
    "img_folder/Excess Liability-1.png": "eee ee ee"
    }
}

尝试了以下逻辑但未达到预期效果:

op_dict = {}
for key, value in ip_dict.items():
    doc_name = key.split("/")[-1]
    if doc_name not in op_dict:
        op_dict[doc_name] = {}
    op_dict[doc_name][key] = value
解决方案

原代码的问题在于把每个图片的完整文件名当成了外层键,而我们需要提取PDF的基础名称(去掉页面编号后缀),同时还要处理Excess-Liability到Excess Liability的替换,以及内层键路径的对应修改。

以下是可行的实现代码:

op_dict = {}
for key, value in ip_dict.items():
    # 从路径中拆分出图片文件名
    img_filename = key.split("/")[-1]
    # 找到最后一个'-'的位置,提取PDF基础名称(去掉页面编号和后缀)
    last_dash_pos = img_filename.rfind("-")
    pdf_base = img_filename[:last_dash_pos]
    
    # 处理Excess-Liability的名称替换
    if pdf_base == "Excess-Liability":
        pdf_base = "Excess Liability"
    # 构造外层字典的键
    outer_key = f"{pdf_base}.png"
    
    # 初始化外层键对应的空字典(如果不存在)
    if outer_key not in op_dict:
        op_dict[outer_key] = {}
    
    # 修改内层键的路径,将Excess-Liability替换为Excess Liability
    inner_key = key.replace("Excess-Liability", "Excess Liability")
    # 添加条目到对应外层字典中
    op_dict[outer_key][inner_key] = value

运行这段代码后,即可得到符合预期的嵌套字典。

内容的提问来源于stack exchange,提问作者spectre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:19:53