亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將文本轉換為字典 [文本行中的重復鍵]

將文本轉換為字典 [文本行中的重復鍵]

紅顏莎娜 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 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號