Reputation: 325
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
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
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