2013-04-23 10 views
8

Sto cercando di formattare una stringa utilizzando un elemento da un dizionario annidato (in basso)Accesso alla annidati voci del dizionario in Python

people = { 
     'Alice': { 
      'phone': '2341', 
      'addr': '87 Eastlake Court' 
      }, 

     'Beth': { 
      'phone': '9102', 
      'addr': '563 Hartford Drive' 
      }, 

     'Randy': { 
      'phone': '4563', 
      'addr': '93 SW 43rd' 
      } 

     } 

dal dizionario sopra (semplice), voglio formattare una stringa da stampare L'estensione del telefono di Randy.

sono in grado di accedere a tutti i suoi dettagli utilizzando:

print("Randy's phone # is %(Randy)s" % people) 

Ma io non sono sicuro su come andare più in profondità nel dizionario di individuare solo il numero di telefono dal dizionario.

Sto usando Python 3.3, a proposito.

risposta

25

Utilizzare la new string formatting:

print("Randy's phone # is {0[Randy][phone]}".format(people)) 

o

print("Randy's phone # is {Randy[phone]}".format(**people)) 

 

Non ha senso nel far passare l'intero dizionario, se si utilizza un solo valore.

print("Randy's phone # is {}".format(people['Randy']['phone'])) 

o

print("Randy's phone # is %s" % people['Randy']['phone']) 

sarà anche funzionare.

Il passaggio del dict ha senso se si dispone di molte di queste stringhe di formato e non si conoscono i valori che utilizzano e si desidera che siano in grado di accedere a qualsiasi valore.

Oppure se si utilizzano molti valori nella stringa di formato e passarli singolarmente è semplicemente troppo prolisso.

+0

Questa è la soluzione più accurata, IMO, ma "il numero di telefono di Randy è% s"% persone ["Randy"] ["telefono"] "è leggermente più efficiente. – Aya

+0

Questo è esattamente! Grazie, non ero a conoscenza della nuova formattazione delle stringhe. Inbar ha presentato un'altra opzione valida: 'print (" Il numero di telefono di Randy è% (telefono) s "% people ['randy'])' Uno si preferirebbe all'altro o considerato più "Pythonic"? – Keith

+0

Aggiunto questo commento per rispondere. –

Problemi correlati