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

Python构造路由器连接字典时值为None问题求助

路由器连接字典构造问题排查

原始数据与需求

你的元组列表:

x = [('router_1', '0/1', '0/4', 'router_2'),
     ('router_1', '0/2', '0/4', 'router_3'),
     ('router_4', '0/1', '0/5', 'router_5'),
     ('router_4', '0/2', '0/5', 'router_6')]

需求:生成以router_1、router_4等设备名为键的字典,每个键对应该设备的所有连接信息。

你的问题代码

import collections
data_dict = collections.defaultdict(list)

result = {}

for item in x:
 router_a, router_a_int, router_b_int, router_b = item
 result[side_a] = data_dict["connections"].append({"side_a": {
 "hostname": router_a,
 "interface": router_a_int},
 "side_b": {
 "interface": router_b_int,
 "hostname": router_b
 }})

问题:字典值始终为None。

错误原因分析

  1. list.append()返回None:这是核心问题。append()方法仅修改列表本身,不会返回有效内容(固定返回None),你把result[side_a]赋值为这个返回值,自然得到None。
  2. 未定义side_a变量:代码中直接使用side_a作为字典键,但这个变量从未被赋值,应该用router_a(也就是你要作为键的设备名称)。
  3. defaultdict使用逻辑混乱:你创建了data_dict但未正确利用,反而额外维护result字典,导致逻辑冗余且出错。

修正后的代码

方案1:使用普通字典手动初始化

result = {}

for router_a, router_a_int, router_b_int, router_b in x:
    # 构造单条连接的结构化数据
    connection = {
        "side_a": {"hostname": router_a, "interface": router_a_int},
        "side_b": {"hostname": router_b, "interface": router_b_int}
    }
    # 若设备名不在字典中,先初始化空列表
    if router_a not in result:
        result[router_a] = []
    # 将连接数据追加到对应列表
    result[router_a].append(connection)

方案2:用defaultdict简化初始化(推荐)

from collections import defaultdict

result = defaultdict(list)

for router_a, router_a_int, router_b_int, router_b in x:
    connection = {
        "side_a": {"hostname": router_a, "interface": router_a_int},
        "side_b": {"hostname": router_b, "interface": router_b_int}
    }
    # defaultdict会自动为不存在的键创建空列表,直接追加即可
    result[router_a].append(connection)

# 可选:将defaultdict转为普通字典
# result = dict(result)

运行结果

执行后result的内容:

{
    'router_1': [
        {'side_a': {'hostname': 'router_1', 'interface': '0/1'}, 'side_b': {'hostname': 'router_2', 'interface': '0/4'}},
        {'side_a': {'hostname': 'router_1', 'interface': '0/2'}, 'side_b': {'hostname': 'router_3', 'interface': '0/4'}}
    ],
    'router_4': [
        {'side_a': {'hostname': 'router_4', 'interface': '0/1'}, 'side_b': {'hostname': 'router_5', 'interface': '0/5'}},
        {'side_a': {'hostname': 'router_4', 'interface': '0/2'}, 'side_b': {'hostname': 'router_6', 'interface': '0/5'}}
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:02:33