为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红颜莎娜 2022-06-28 10:34:50
我有如下示例文本文件asy1 10.20.0.1byt 192.1.10.100byt 192.1.10.101byt 192.1.10.102hps 10.30.1.50hps 10.30.1.53hps 10.30.1.54hps 10.30.1.55hps 10.30.1.56zte 10.100.1.1zte 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'}我在这里错过了一些东西......请告诉我。谢谢
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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


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。


查看完整回答
反对 回复 2022-06-28
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

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



查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号