2010-09-24 23 views
98

Para la tupla, t = ((1, 'a'),(2, 'b')) dict(t) vuelve {1: 'a', 2: 'b'}pitón tupla a dict

¿Hay una buena manera de conseguir {'a': 1, 'b': 2} (teclas y Vals en préstamo)?

Estoy queriendo poder devolver 1 dado 'a' o 2 dado 'b', tal vez la conversión a un dict no es la mejor manera.

Respuesta

183

Probar:

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

+1 hermosas !, tuve que probarlo con cremallera 'dict (zip (* postal (t *) [ :: - 1])) '. Esto es más lento, más feo y usa mucho más memoria ... es probable 3x. – kevpie

+1

+1 ¡¡¡Genial !!! ¡Es exactamente lo que necesito! :) –

+0

@kevpie Lo maravilloso de Python es que hay cientos de maneras de expresar cómo hacer algo, cada una tan interesante como la siguiente. – bjd2385

52

Un método ligeramente más simple:

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

¿qué hace que esto sea más rápido? – maazza

+2

Las funciones de mapa y dict se implementan en C y son mucho más rápidas que cualquier versión de Python – jterrace

+0

Me gusta por tener explícitamente escrito el 'reverse '. –

5
>>> 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}] 
34

Aún más concisa si está en Python 2.7:

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

Si hay varios valores para la misma clave, se agregará el siguiente código e valores a una lista correspondiente a su clave,

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

¿Por qué lo hace difícil? se puede decir simplemente:

t = ((1, 'a'),(2, 'b')) 
tdic = dict(t) 
+0

Esta es una respuesta incorrecta a la pregunta '¿Hay una buena manera de obtener {' a ': 1,' b ': 2} (claves y valores intercambiados)?'. En su respuesta tiene claves como 1 y 2. La pregunta es tener claves como 'a' y 'b'. –

0

Estas son algunas maneras de hacerlo par:

>>> 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} 
Cuestiones relacionadas