web-dev-qa-db-fra.com

tuple en python à dicter

Pour le tuple, t = ((1, 'a'),(2, 'b'))dict(t) renvoie {1: 'a', 2: 'b'}

Existe-t-il un bon moyen d’obtenir {'a': 1, 'b': 2} (clés et valeurs permutées)?

En fin de compte, je veux pouvoir renvoyer 1 donné 'a' ou 2 donné 'b', la conversion en dict n'est peut-être pas la meilleure solution.

119
Jake

Essayer:

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

Une méthode légèrement plus simple:

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

Encore plus concis si vous êtes sur Python 2.7:

>>> t = ((1,'a'),(2,'b'))
>>> {y:x for x,y in t}
{'a':1, 'b':2}
37
autholykos
>>> 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}]
6
Gunnarsson

S'il existe plusieurs valeurs pour la même clé, le code suivant les ajoutera à une liste correspondant à leur clé.

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

Voici quelques façons de le faire:

>>> 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}
0
Vlad Bezden