Python中按位置匹配两个字典生成指定键名新字典的问题
按位置匹配字典生成新字典的正确实现
错误原因分析
你写的嵌套循环会让dict1的每个元素遍历一遍dict2的所有键值对,每次赋值都会覆盖之前的结果,最终所有键都被dict2的最后一个值覆盖,导致输出不符合预期。
正确实现代码
因为要求第n个元素一一匹配,直接将两个字典的values()按顺序配对即可(Python 3.7+ 字典默认保持插入顺序):
dict1 = {'imgsss/modifiedmerged/modifiedmerged-2.png': 3, 'imgsss/modifiedmerged/modifiedmerged-4.png': 5} dict2 = {"form1": "POLICY NUMBER COMMERCIAL GENERAL", "form2": "ACP GLDO7285650787"} # 方法1:字典推导式(简洁) op_dict = {f'form{v_num}': content for v_num, content in zip(dict1.values(), dict2.values())} # 方法2:普通循环(更直观) op_dict = {} for v_num, content in zip(dict1.values(), dict2.values()): op_dict[f'form{v_num}'] = content
验证输出
运行后得到的op_dict与预期完全一致:
{ "form3": "POLICY NUMBER COMMERCIAL GENERAL", "form5": "ACP GLDO7285650787" }
兼容低版本Python(<3.7)
如果你的Python版本低于3.7,字典不保证存储顺序,需要确保dict1和dict2的元素顺序对应,可以用OrderedDict定义原始字典:
from collections import OrderedDict dict1 = OrderedDict([ ('imgsss/modifiedmerged/modifiedmerged-2.png', 3), ('imgsss/modifiedmerged/modifiedmerged-4.png', 5) ]) dict2 = OrderedDict([ ("form1", "POLICY NUMBER COMMERCIAL GENERAL"), ("form2", "ACP GLDO7285650787") ]) op_dict = {f'form{v_num}': content for v_num, content in zip(dict1.values(), dict2.values())} ``` operating 闭戴 NVIDIACount DrawingCL完美积淀CA� cooperationon 这样就可以保证顺序匹配了。 内容的提问来源于stack exchange,提问作者spectre
相关产品推荐
相关产品推荐

