Inverting the original dict with non-unique values can be done cleaner (without the explicit two line for loop and IMO easier to read) using a defaultdict:
>>>fromcollectionsimportdefaultdict>>># Original dict
>>>my_dict={'Izuku Midoriya':'One for All','Katsuki Bakugo':'Explosion','All Might':'One for All','Ochaco Uraraka':'Zero Gravity'}>>>my_dict_inverted=defaultdict(list)>>>[my_dict_inverted[v].append(k)fork,vinmy_dict.items()]>>>my_dict_inverteddefaultdict(<class'list'>, {'OneforAll': ['IzukuMidoriya', 'AllMight'], 'Explosion': ['KatsukiBakugo'], 'ZeroGravity': ['OchacoUraraka']})
Or to make it more intuitive denote the comprehension using a dict since that is what we are applying the operation to:
Great addition! I would prefer to maintain the dict type and leave out any extraneous imports, but this gets the job done and is probably less error prone.
It's part of the standard library and it's still a dict so you can use any it like a normal dict, e.g. my_dict_inverted['One for All'] as well as all methods from a normal dict like keys(), values() and items().
Hi again! I'm in the process of updating this article, and I just realized that this answer has a minor problem. We're using a dictionary comprehension in a bad way. We're updating some external dictionary while the comprehension will also generate a dictionary (in this case, {None}). I believe that's considered bad practice, so I've added a note in the original article.
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Inverting the original dict with non-unique values can be done cleaner (without the explicit two line
for
loop and IMO easier to read) using adefaultdict
:Or to make it more intuitive denote the comprehension using a
dict
since that is what we are applying the operation to:Great addition! I would prefer to maintain the dict type and leave out any extraneous imports, but this gets the job done and is probably less error prone.
Mind if I add it to the list?
Go ahead :)
It's part of the standard library and it's still a dict so you can use any it like a normal dict, e.g.
my_dict_inverted['One for All']
as well as all methods from a normal dict likekeys()
,values()
anditems()
.Hi again! I'm in the process of updating this article, and I just realized that this answer has a minor problem. We're using a dictionary comprehension in a bad way. We're updating some external dictionary while the comprehension will also generate a dictionary (in this case,
{None}
). I believe that's considered bad practice, so I've added a note in the original article.