2011-09-21 3 views
6

Diciamo che ho un dizionario Python, ma i valori sono una tupla:Il dizionario Query Python per ottenere il valore da tuple

E.g.

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

e voglio recuperare solo il terzo valore dalla tupla, ad es. ValZ1, ValZ2 o ValZ99 dell'esempio precedente.

ho potuto farlo utilizzando .iteritems(), ad esempio come:

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

tuttavia, c'è un approccio più diretto?

Idealmente, vorrei interrogare il dizionario a chiave e restituire solo il terzo valore nella tupla ...

esempio

dict[Key1] = ValZ1 invece di quello che attualmente ricevo, che è dict[Key1] = (ValX1, ValY1, ValZ1) che non è richiamabile ...

Qualche consiglio?

risposta

7

Basta tenere l'indicizzazione:

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

Grande. Esattamente quello che stavo cercando! Grazie. – jsnider

+0

Prego. Inoltre, non dimenticare di accettare una risposta alla domanda (la casella di controllo a sinistra). –

4

Uso disimballaggio tupla:

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

Spesso le persone usano

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

se sono interessati solo a un elemento della tupla. Ma questo potrebbe causare problemi se si utilizza il modulo gettext per applicazioni multilingue, poiché questo modello imposta una funzione globale denominata _.

Come tuple sono immutabili, non sono in grado di impostare un solo elemento come

d[key][0] = x 

devi scompattare prima:

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

Molto utile, grazie! Un paio di opzioni diverse lì. Saluti! – jsnider

1

Usando un'espressione di generatore!

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

Non è necessario utilizzare iteritems perché si stanno osservando solo i valori.