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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:53:11