For the tuple, t = ((1, 'a'),(2, 'b')) dict(t) returns {1: 'a', 2: 'b'}

Is there a good way to get {'a': 1, 'b': 2} (keys and vals swapped)?

Ultimately, I want to be able to return 1 given 'a' or 2 given 'b', perhaps converting to a dict is not the best way.

6 Answers

Try:

>>> t = ((1, 'a'),(2, 'b')) >>> dict((y, x) for x, y in t) {'a': 1, 'b': 2} 
4

A slightly simpler method:

>>> t = ((1, 'a'),(2, 'b')) >>> dict(map(reversed, t)) {'a': 1, 'b': 2} 
4

Even more concise if you are on python 2.7:

>>> t = ((1,'a'),(2,'b')) >>> {y:x for x,y in t} {'a':1, 'b':2} 
>>> dict([('hi','goodbye')]) {'hi': 'goodbye'} 

Or:

>>> [ dict([i]) for i in (('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14), ('CSCO', 21.14)) ] [{'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}, {'CSCO': 21.14}] 
0

If there are multiple values for the same key, the following code will append those values to a list corresponding to their key,

d = dict() for x,y in t: if(d.has_key(y)): d[y].append(x) else: d[y] = [x] 

Here are couple ways of doing it:

>>> t = ((1, 'a'), (2, 'b')) >>> # using reversed function >>> dict(reversed(i) for i in t) {'a': 1, 'b': 2} >>> # using slice operator >>> dict(i[::-1] for i in t) {'a': 1, 'b': 2} 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy