我有一个文件,其中每行有 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条经验 获得超5个赞
您可以将两个关键行更改为:
d.setdefault(e1, []).append(e2) d.setdefault(e2, []).append(e1)
如果密钥不存在,这将启动一个空列表,然后填充它。
慕容森
TA贡献1853条经验 获得超18个赞
您可以使用默认字典:
>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for i in range(0, len(l), 2):
... d[e1].append(e2)
Cats萌萌
TA贡献1805条经验 获得超9个赞
创建一个 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
提交
取消