Python按key匹配规则合并多字典生成指定结构及KeyError问题解决
代码修复实现
报错根因
原代码直接通过dict_2[interface]的方式判断键是否存在,当接口名不在dict_2中时会直接抛出KeyError,你遇到的GigabitEthernet0/0/0报错就是因为该接口仅存在于dict_1和dict_3中,不存在于dict_2中,直接访问不存在的键触发了异常。
实现逻辑
优先对接口的存在范围做判断:
- 接口同时存在于dict_1、dict_2、dict_3三个字典中:生成带
vrf字段的templ_ip_parameters_1结构 - 接口仅同时存在于dict_1和dict_3中:生成不带
vrf字段的templ_ip_parameters_2结构
可运行代码
dict_1 = { 'GigabitEthernet0/0/0': '1.1.1.1/31', 'GigabitEthernet0/0/2': '2.2.2.2/31', 'GigabitEthernet0/0/1.2': '3.3.3.3/31', } dict_2 = { 'GigabitEthernet0/0/1': 'test_2', 'GigabitEthernet0/0/2': 'test_1', 'GigabitEthernet0/0/1.6': 'test_3', } dict_3 = { 'GigabitEthernet0/0/0': 891, 'GigabitEthernet0/0/2': 892, 'GigabitEthernet0/0/1.2': 893, 'GigabitEthernet0/0/1.5': 894, } # 存储最终结果,key为接口名,value为对应结构的参数字典 result = {} for interface in dict_1.keys(): # 先判断是否三个字典都有该key if interface in dict_2 and interface in dict_3: # 生成templ_ip_parameters_1结构 params = { "address": dict_1[interface], "vrf": {"name": dict_2[interface]}, "assigned_object_id": dict_3[interface] } result[interface] = params print(f"接口{interface}生成三匹配结构:{params}") # 仅dict1和dict3匹配的情况 elif interface in dict_3: # 生成templ_ip_parameters_2结构 params = { "address": dict_1[interface], "assigned_object_id": dict_3[interface] } result[interface] = params print(f"接口{interface}生成两匹配结构:{params}")
运行输出
接口GigabitEthernet0/0/0生成两匹配结构:{'address': '1.1.1.1/31', 'assigned_object_id': 891} 接口GigabitEthernet0/0/2生成三匹配结构:{'address': '2.2.2.2/31', 'vrf': {'name': 'test_1'}, 'assigned_object_id': 892} 接口GigabitEthernet0/0/1.2生成两匹配结构:{'address': '3.3.3.3/31', 'assigned_object_id': 893}
内容的提问来源于stack exchange,提问作者Aliaksei.Statkevich
相关产品推荐
相关产品推荐

