2011-09-21 7 views
6

Digamos que tengo un diccionario de Python, pero los valores son una tupla:diccionario de consulta Python para obtener el valor de la tupla

P. ej

dict = {"Key1": (ValX1, ValY1, ValZ1), "Key2": (ValX2, ValY2, ValZ2),...,"Key99": (ValX99, ValY99, ValY99)} 

y quiero recuperar solo el tercer valor de la tupla, p. Ej. ValZ1, ValZ2 o ValZ99 del ejemplo anterior.

que podía hacer por medio de .iteritems(), como por ejemplo:

for key, val in dict.iteritems(): 
     ValZ = val[2] 
embargo

, ¿existe un enfoque más directo?

Idealmente, me gustaría consultar el diccionario de llave y devolver sólo el tercer valor de la tupla ...

por ejemplo,

dict[Key1] = ValZ1 en lugar de lo que actualmente hago, que es dict[Key1] = (ValX1, ValY1, ValZ1) que no es exigible ...

Algún consejo?

Respuesta

7

Sólo mantener la indexación:

>>> D = {"Key1": (1,2,3), "Key2": (4,5,6)} 
>>> D["Key2"][2] 
6 
+0

Genial. ¡Exactamente lo que estaba buscando! Gracias. – jsnider

+0

De nada. Además, no olvides aceptar una respuesta a la pregunta (la casilla de verificación a la izquierda). –

4

Uso tupla desembalaje:

for key, (valX, valY, valZ) in dict.iteritems(): 
     ... 

A menudo la gente usa

for key, (_, _, valZ) in dict.iteritems(): 
     ... 

si sólo están interesados ​​en un elemento de la tupla. Pero esto puede causar problemas si usa el módulo gettext para aplicaciones de múltiples idiomas, ya que este modelo establece una función global llamada _.

Como tuplas son inmutables, que no son capaces de establecer un único artículo como

d[key][0] = x 

Tienes que descomprimir primero:

x, y, z = d[key] 
d[key] = x, newy, z 
+0

Muy útil, ¡gracias! Un par de opciones diferentes allí. ¡Aclamaciones! – jsnider

1

Usando una expresión de generador!

for val in (x[2] for x in dict): 
    print val 

No necesita utilizar iteritems porque solo está mirando los valores.

Cuestiones relacionadas