Vondoe79
Vondoe79

Reputation: 325

Creating a dictionary from 2 lists with duplicate keys

Though I have seen versions of my issue whereby a dictionary was created from two lists (one list with the keys, and the other with the corresponding values), I want to create a dictionary from a list (containing the keys), and 'lists of list' (containing the corresponding values).

An example of my code is:

#-Creating python dictionary from a list and lists of lists:
keys = [18, 34, 30, 30, 18]
values = [[7,8,9],[4,5,6],[1,2,3],[10,11,12],[13,14,15]]
print "This is example dictionary: "
print dictionary

The result I expect to get is:

{18:[7,8,9],34:[4,5,6],30:[1,2,3],30:[10,11,12],18:[13,14,15]}

I do not need the repeated keys (30, 18) to be paired up with their respective values.

Instead, I keep getting the following result:

{18: [13, 14, 15], 34: [4, 5, 6], 30: [10, 11, 12]}

This result is missing two of the elements from my expected list.

I am hoping to have some help from this forum.

Upvotes: 3

Views: 5332

Answers (2)

jpp
jpp

Reputation: 164843

As already mentioned, your desired output is not possible as dictionary keys must be unique.

Below are 2 alternatives if you do not want to lose data.

List of tuples

res = [(i, j) for i, j in zip(keys, values)]

# [(18, [7, 8, 9]),
#  (34, [4, 5, 6]),
#  (30, [1, 2, 3]),
#  (30, [10, 11, 12]),
#  (18, [13, 14, 15])]

Dictionary of lists

from collections import defaultdict

res = defaultdict(list)

for i, j in zip(keys, values):
    res[i].append(j)

# defaultdict(list,
#             {18: [[7, 8, 9], [13, 14, 15]],
#              30: [[1, 2, 3], [10, 11, 12]],
#              34: [[4, 5, 6]]})

Upvotes: 4

JackNorthrup
JackNorthrup

Reputation: 363

Keys need to be unique. 
You Have keys = [18, 34, 30, 30, 18]
Repeated keys 18 and 30 can not be used twice.
Try your script with unique keys and it works fine.
Keys read right to left. Notice you get the first key 18 
and the first key 30, but the second of each key is passed over 

Upvotes: 0

Related Questions