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

Python根据接口号合并嵌套列表中同INTF字段字典的实现问题

解决思路
  • 首先建立接口类型缩写到全称的映射,保证同一类接口的类型标识统一
  • 编写辅助函数拆分接口名称,提取接口类型+编号作为唯一匹配键
  • 展平嵌套列表,遍历所有接口字典,按键分组合并字典
  • 最后将合并后的字典转为列表输出
实现代码
# 接口缩写到全称的映射,可根据实际接口类型扩展
intf_type_map = {
    'Vl': 'Vlan',
    'Fa': 'FastEthernet',
    'Gi': 'GigabitEthernet',
    'Te': 'TenGigabitEthernet'
}

def get_intf_key(intf_name):
    # 拆分接口名的前缀和数字部分
    prefix = []
    num = []
    for c in intf_name:
        if c.isalpha():
            prefix.append(c)
        else:
            num.append(c)
    prefix = ''.join(prefix)
    num = ''.join(num)
    # 归一化前缀为全称
    norm_prefix = intf_type_map.get(prefix, prefix)
    # 返回统一键:(归一化类型, 接口编号)
    return (norm_prefix, num)

# 原始数据
a = [
    [
        {'DESCRIP': '', 'INTF': 'Vl77', 'PROTOCOL': 'up', 'STATUS': 'up'},
        {'DESCRIP': '', 'INTF': 'Fa0', 'PROTOCOL': 'down', 'STATUS': 'admin down'}
    ],
    [
        {'INBOUND_ACL': '', 'INTF': 'Vlan77', 'IPADDR': ['192.168.77.11/24'], 'IP_HELPER': [], 'LINK_STATUS': 'up', 'MTU': '1500', 'OUTGOING_ACL': '', 'PROTOCOL_STATUS': 'up', 'VRF': ''},
        {'INBOUND_ACL': '', 'INTF': 'FastEthernet0', 'IPADDR': [], 'IP_HELPER': [], 'LINK_STATUS': 'administratively down', 'MTU': '', 'OUTGOING_ACL': '', 'PROTOCOL_STATUS': 'down', 'VRF': ''}
    ]
]

# 存储合并结果的临时字典
merged = {}
# 展平嵌套列表遍历所有接口字典
for sublist in a:
    for intf_dict in sublist:
        # 过滤没有INTF字段的字典
        if 'INTF' not in intf_dict:
            continue
        intf_key = get_intf_key(intf_dict['INTF'])
        if intf_key not in merged:
            merged[intf_key] = {}
        # 合并字典,后续的键值会覆盖前面重复的键
        merged[intf_key].update(intf_dict)

# 转为列表格式输出
new_dict = list(merged.values())
print(new_dict)
代码说明
  • 接口映射表可以根据实际业务中遇到的接口类型自行扩展,比如增加Eth、Trunk等类型的映射
  • 合并逻辑默认用后出现的字典的键值覆盖先出现的重复键,符合示例中保留全称INTF的需求,如果需要调整优先级可以修改遍历顺序
  • 自动过滤没有INTF字段的字典,避免运行报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:09:04