создать словарь python, где значение представляет собой список строк - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть файл, в котором есть 2 имени в каждой строке. Допустим, у меня есть следующие данные:

name1 name2
name3 name4
name1 name5

Я хочу создать словарь, подобный этому:

имя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 ]

1 голос
/ 16 апреля 2020

Вы можете изменить две критические строки на:

d.setdefault(e1, []).append(e2)
d.setdefault(e2, []).append(e1)

Это приведет к запуску пустого списка, если ключ отсутствует, и заполнению его.

0 голосов
/ 16 апреля 2020

Вы можете использовать defaultdict:

>>> from collections import defaultdict

>>> d = defaultdict(list)
>>> for i in range(0, len(l), 2):
...     d[e1].append(e2)
0 голосов
/ 16 апреля 2020

Создайте 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])
...