Spenhouet
Spenhouet

Reputation: 7169

Flat map list without losing mapping?

I have a existing dict that maps single values to lists. I want to reverse this dictionary and map from every list entry on the original key. The list entries are unique.

Given:

dict { 1: ['a', 'b'], 2: ['c'] }

Result:

dict { 'a' : 1, 'b' : 1, 'c' : 2 }

How can this be done?

Upvotes: 0

Views: 275

Answers (2)

bphi
bphi

Reputation: 3195

Here's an option

new_dict = {v: k for k, l in d.items() for v in l}
{'a': 1, 'b': 1, 'c': 2}

Upvotes: 8

Ajax1234
Ajax1234

Reputation: 71451

You can use a list comprehension to produce a tuple with the key-value pair, then, flatten the new list and pass to the built-in dictionary function:

d = { 1: ['a', 'b'], 2: ['c'] }
new_d = dict([c for h in [[(i, a) for i in b] for a, b in d.items()] for c in h])

Output:

{'a': 1, 'c': 2, 'b': 1}

Upvotes: 0

Related Questions