将文本转换为字典 [文本行中的重复键]

我有如下示例文本文件


asy1 10.20.0.1

byt 192.1.10.100

byt 192.1.10.101

byt 192.1.10.102

hps 10.30.1.50

hps 10.30.1.53

hps 10.30.1.54

hps 10.30.1.55

hps 10.30.1.56

zte 10.100.1.1

zte 10.100.1.2

当我在下面运行脚本时


mydict = {}

with open('devices.txt', 'r') as file:

   for line in file:

      name, ip = line.split()

      mydict[name] = ip.strip()

print(mydict)

它不会按照文本文件返回所有行/内容。


{'hps': '10.30.1.56', 'zte': '10.100.1.2', 'byt': '192.1.10.102', 'asy1': '10.20.0.1'}

我在这里错过了一些东西......请告诉我。谢谢


红颜莎娜
浏览 130回答 2
2回答

慕尼黑5688855

在字典中,键必须是唯一的,当你这样做时:mydict[name] = ip.strip()通过执行以下操作,您可以覆盖值,而不是为键提供单个值,您可以存储值列表:mydict = {}with open('devices.txt', 'r') as file:    for line in file:        name, ip = line.split()        if name not in mydict:            mydict[name] = []        mydict[name].append(ip.strip())print(mydict)输出{'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']}第二种选择是使用setdefault代替:mydict.setdefault(name, []).append(ip.strip())第三种选择是使用defaultdict。如果值是唯一的,请考虑使用set。

小唯快跑啊

其中许多名称是相同的,但是 adict对于给定的键只能有一个值 - 如果您尝试使用 key 将 IP 添加到字典中hps,但其中已经有一个,它将被覆盖。也许使用 alist代替?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python