我有一個文件,其中每行有 2 個名稱。假設我有以下輸入:名稱1 名稱2 名稱3 名稱4 名稱1名稱5我想做一個這樣的字典:名稱 1:[名稱 2,名稱 5]名稱 2:名稱1 名稱 3:名稱 4 名稱4:名稱 3 名稱 5:名稱1這是我制作的代碼,但我無法弄清楚我做錯了什么..d = {} for i in range(len(l)): # consider l the input d[l[i]] = ""for i in range(0, len(l), 2): e1 = l[i] e2 = l[i+1] d.update({e1 : [d[e1], e2]}) #i think the update operation is wrong here.. d.update({e2 : [d[e2], e1]})
3 回答

慕工程0101907
TA貢獻1887條經(jīng)驗 獲得超5個贊
您可以將兩個關鍵行更改為:
d.setdefault(e1, []).append(e2) d.setdefault(e2, []).append(e1)
如果密鑰不存在,這將啟動一個空列表,然后填充它。

慕容森
TA貢獻1853條經(jīng)驗 獲得超18個贊
您可以使用默認字典:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for i in range(0, len(l), 2):
... d[e1].append(e2)

Cats萌萌
TA貢獻1805條經(jīng)驗 獲得超9個贊
創(chuàng)建一個 defaultdict d,它將空列表設置為每個鍵的初始值,并在迭代時填充它們l。
from collections import defaultdict
l = ['name1', 'name2', 'name3', 'name4', 'name1', 'name5'] # Values come in pairs
d = defaultdict(list) # Defaults all keys to []
for i in range(0, len(l), 2):
d[l[i]].append(l[i+1])
d[l[i+1]].append(l[i])
添加回答
舉報
0/150
提交
取消