首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本转换为字典[文本行中的重复键]

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

Stack Overflow用户
提问于 2019-10-19 09:06:18
回答 2查看 53关注 0票数 0

我有如下示例文本文件

代码语言:javascript
复制
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

当我运行以下脚本时

代码语言:javascript
复制
mydict = {}
with open('devices.txt', 'r') as file:
   for line in file:
      name, ip = line.split()
      mydict[name] = ip.strip()
print(mydict)

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

代码语言:javascript
复制
{'hps': '10.30.1.56', 'zte': '10.100.1.2', 'byt': '192.1.10.102', 'asy1': '10.20.0.1'}

我错过了here...Please建议我的一些东西。谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-10-19 09:10:35

在字典中,键必须是唯一的,当您这样做时:

代码语言:javascript
复制
mydict[name] = ip.strip()

您可以重写该值,而不是为一个键存储一个值列表,方法是执行以下操作:

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
{'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

代码语言:javascript
复制
mydict.setdefault(name, []).append(ip.strip())

第三种选择是使用defaultdict。如果值是唯一的,请考虑使用set

票数 2
EN

Stack Overflow用户

发布于 2019-10-19 09:08:11

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58459704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档