如何将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
相关产品推荐
相关产品推荐

