Python字典重复键问题:无法完整读取设备IP数据求助
问题分析与解决方案
你的问题核心在于字典的键具有唯一性,当你用设备类型(比如hps、byt)作为字典的键时,后续相同类型的IP会直接覆盖掉之前存储的值,所以最终只保留了每个设备类型的最后一个IP。另外,你的原始输入文本是一行内包含多组「设备类型+IP」的连续序列,原脚本的line.split()会把整行拆成一个大列表,直接取name, ip = line.split()其实逻辑不严谨(如果整行元素数多于2,会触发解包错误,你这里没报错是因为元素数刚好为偶数,但处理逻辑不对)。
修复后的脚本
mydict = {} with open('devices.txt', 'r') as file: # 读取整行内容,按空格拆分成元素列表 items = file.read().split() # 两两分组遍历:设备类型和IP成对出现,步长设为2 for i in range(0, len(items), 2): dev_type = items[i] ip = items[i+1].strip() # 如果当前设备类型不在字典中,初始化一个空列表 if dev_type not in mydict: mydict[dev_type] = [] # 将IP追加到对应类型的列表中 mydict[dev_type].append(ip) print(mydict)
代码解释
file.read().split():把整个文本内容按空格拆分,得到一个包含所有设备类型和IP的列表,例如['asy1', '10.20.0.1', 'byt', '192.1.10.100', ...]range(0, len(items), 2):通过步长2实现两两分组遍历,每次取items[i]作为设备类型,items[i+1]作为对应IP- 将字典的值改为列表类型,这样同一个设备类型下的所有IP都能被收集起来,不会被覆盖
预期运行结果
执行后你会得到包含所有IP的字典:
{'asy1': ['10.20.0.1'], 'byt': ['192.1.10.100', '192.1.10.101', '192.1.10.102'], 'hps': ['10.30.1.50', '10.30.1.53', '10.30.1.54', '10.30.1.55', '10.30.1.56'], 'zte': ['10.100.1.1', '10.100.1.2']}
内容的提问来源于stack exchange,提问作者chenoi
相关产品推荐
相关产品推荐

