基于Excel库存表按地点创建{主机名:IP地址}字典时遇TypeError报错求助
基于Excel库存表按地点创建{主机名:IP地址}字典时遇TypeError报错求助
嗨,我来帮你分析下这个问题~
你遇到的TypeError: 'str' object does not support item assignment错误,核心原因是:你从Excel单元格里取出的dict_name是字符串类型(比如单元格里的"a"、"b"、"c"),而不是真正的字典对象。你试图给字符串做字典式的键值赋值,这显然是不允许的。
解决思路
我们可以用一个主字典来统一管理各个地点的子字典,主字典的键是地点名称(也就是你原来dict_name对应的字符串),值就是该地点对应的{主机名: IP地址}字典。这样既不用动态创建变量名,也能完美避开字符串当字典用的问题。
修改后的代码示例
from openpyxl import load_workbook # 加载Excel文件和目标工作表 workbook = load_workbook(filename="Test db.xlsx") worksheet = workbook.active # 主字典:用于存储所有地点对应的{主机名:IP}子字典 location_host_ip = {} for row in range(1, worksheet.max_row + 1): # 读取当前行的主机名、IP地址、地点名称 hostname = worksheet.cell(row, 4).value ip_address = worksheet.cell(row, 2).value loc_name = worksheet.cell(row, 6).value # 如果当前地点还没有对应的子字典,先初始化一个空字典 if loc_name not in location_host_ip: location_host_ip[loc_name] = {} # 将主机名和IP对应存入该地点的子字典 location_host_ip[loc_name][hostname] = ip_address # 打印所有地点的字典结果 for loc, host_dict in location_host_ip.items(): print(f"地点 {loc} 的主机IP映射:") print(host_dict) print("------") # 如果要单独调用某个地点的字典,比如地点"a",可以这样写: # print(location_host_ip.get("a", "该地点无数据"))
代码说明
- 主字典
location_host_ip:把所有地点的子字典集中管理,键是地点名称,值是对应主机IP映射,逻辑清晰还方便后续调用。 - 子字典初始化:遍历每行时先检查当前地点是否已在主字典中,不存在就创建空字典,避免键不存在的报错。
- 填充键值对:确认子字典存在后,直接将当前行的主机名和IP存入对应位置即可。
这样修改后,就能实现你想要的“每个地点对应一个{主机名:IP}字典”的需求,也不会再出现之前的类型错误啦~
备注:内容来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

