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

Python如何从CSV文件创建设备接口VLAN映射嵌套字典

问题原因

你的代码出现覆盖问题的核心原因很简单:每次循环匹配到同一设备的行时,你都直接给d[row['device']]赋值了一个全新的单键字典,之前存储在这个键下的其他接口映射会被直接替换,最终只会保留每台设备最后一次遍历到的接口-VLAN对。

修复方案

不要直接替换设备对应的整个二级字典,而是在遇到设备条目时:

  • 先检查一级字典里是否已经存在当前设备的键,不存在就先初始化一个空字典作为值
  • 再往这个设备对应的二级字典里,单独新增当前接口和VLAN的键值对,不会影响已经存在的其他接口条目

基础实现代码

import csv

d = {}
with open("interfaces.csv", encoding="utf-8") as f:
    csv_reader = csv.DictReader(f)
    for row in csv_reader:
        dev = row["device"]
        # 设备首次出现时初始化空的接口映射字典
        if dev not in d:
            d[dev] = {}
        # 追加单条接口-VLAN映射,不覆盖原有内容
        d[dev][row["interface"]] = row["vlan"]

运行后得到的字典结构完全符合你的预期:

{
    "switch1": {"ge-0/0/11": "vlan1", "ge-0/0/12": "vlan1"},
    "switch2": {"ge-0/0/13": "vlan10", "ge-0/0/14": "vlan20"},
    "switch3": {"ge-0/0/15": "vlan1"},
    "switch4": {"ge-0/0/16": "vlan12"},
    "switch5": {"ge-0/0/17": "vlan11"}
}

简化写法(可选)

如果想省略手动判断key是否存在的步骤,可以用标准库collections中的defaultdict,它会自动给不存在的一级键初始化空字典:

import csv
from collections import defaultdict

d = defaultdict(dict)
with open("interfaces.csv", encoding="utf-8") as f:
    csv_reader = csv.DictReader(f)
    for row in csv_reader:
        d[row["device"]][row["interface"]] = row["vlan"]

# 需要原生普通字典的话,加一行转换即可
d = dict(d)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:42:40