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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:48:05