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

2024-06-02 12:37:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下示例文本文件

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'}

我错过了一些东西…请告诉我。谢谢


Tags: nameip脚本示例withlineopenmydict
2条回答

其中许多名称是相同的,但是dict对于给定的键只能有一个值-如果您尝试使用键hps将IP添加到字典中,但其中已经有一个IP,它将被覆盖。也许用list代替?你知道吗

在字典中,键必须是uniques,当您执行以下操作时:

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。你知道吗

相关问题 更多 >