qwerty2121
qwerty2121

Reputation: 13

create a python dictionary where the value is a list of strings

I have a file in which there are 2 names on each line. Let's say i have the following input:

name1 name2
name3 name4
name1 name5

I want to make a dictionary like this:

name1 : [name2, name5]
name2 : name1
name3 : name4
name4 : name3
name5 : name1

Here is the code I made but i can't figure out what i did wrong..

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]})

Upvotes: 0

Views: 67

Answers (3)

SteveK
SteveK

Reputation: 995

Create a defaultdict d which sets empty lists as the initial values for every key and populate them as you iterate over 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])

Upvotes: 0

Ido Savion
Ido Savion

Reputation: 143

You can use defaultdict:

>>> from collections import defaultdict

>>> d = defaultdict(list)
>>> for i in range(0, len(l), 2):
...     d[e1].append(e2)

Upvotes: 0

user2390182
user2390182

Reputation: 73460

You can change the two critical lines to:

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

This will start an empty list if the key is not present and then fill it.

Upvotes: 1

Related Questions