2013-06-14 17 views
6

dire che ho un elenco di dizionari che hanno nomi e le età e altre informazioni, in questo modo:Python Accesso ai valori in un elenco di dizionari

thisismylist= [ 
       {'Name': 'Albert' , 'Age': 16}, 
       {'Name': 'Suzy', 'Age': 17}, 
       {'Name': 'Johnny', 'Age': 13} 
] 

Come potrei fare per stampare i seguenti utilizzando un ciclo for:

Albert 
Suzy 
Johnny 

ho appena cant avvolgere la mia testa intorno a questa idea ...

risposta

3

Sembra che è necessario andare oltre la Python flow-control documentation. Fondamentalmente, ti basta scorrere su tutti gli elementi del tuo elenco, e poi per ciascuno di questi elementi (dizionari, in questo caso) puoi accedere ai valori che vuoi. Il codice seguente, ad esempio, stamperà ogni valore in ogni dizionario all'interno della lista.

for d in my_list: 
    for key in d: 
     print d[key] 

Si noti che questo non stampa i tasti, solo i valori. Per stampare anche i tasti, rendere il vostro comunicato stampa print key, d[key]. Così facile!

Ma in realtà, leggi la documentazione di controllo del flusso; è molto carino.

12

Se siete solo in cerca di valori associati a 'Nome', il codice dovrebbe essere simile:

for d in thisismylist: 
    print d['Name'] 
0

Si potrebbe proiettare l'attributo Name da ogni elemento della lista e unire i risultati con a capo :

>>> print '\n'.join(x['Name'] for x in thisismylist) 
Albert 
Suzy 
Johnny 

Modifica

mi ci sono voluti un paio di minuti, ma mi sono ricordato l'o c'è un modo interessante per farlo. È possibile utilizzare una combinazione di itertools e il modulo operator anche per questo. È possibile see it on repl.it too.

>>> from itertools import imap 
>>> from operator import itemgetter 
>>> print '\n'.join(imap(itemgetter('Name'), thisismylist)) 
Albert 
Suzy 
Johnny 

In ogni caso, si sono probabilmente meglio utilizzare un ciclo di vaniglia for, ma ho pensato che alcune altre opzioni erano in ordine.

5

Se si desidera un elenco di tali valori:

>>> [d['Name'] for d in thisismylist] 
['Albert', 'Suzy', 'Johnny'] 

Lo stesso metodo, è possibile ottenere una tupla dei dati:

>>> [(d['Name'],d['Age']) for d in thisismylist] 
[('Albert', 16), ('Suzy', 17), ('Johnny', 13)] 

Oppure, girare l'elenco dei dicts in un singolo tasto , coppia di valori dizionario:

>>> {d['Name']:d['Age'] for d in thisismylist} 
{'Johnny': 13, 'Albert': 16, 'Suzy': 17} 

Così, lo stesso metodo, un modo per stamparle:

>>> print '\n'.join(d['Name'] for d in thisismylist) 
Albert 
Suzy 
Johnny 

E si può stampare allineati se lo si desidera:

>>> print '\n'.join(sorted(d['Name'] for d in thisismylist)) 
Albert 
Johnny 
Suzy 

Oppure, ordina per la loro età, mentre appiattendo la lista:

>>> for name, age in sorted([(d['Name'],d['Age']) for d in thisismylist],key=lambda t:t[1]): 
... print '{}: {}'.format(name,age) 
... 
Johnny: 13 
Albert: 16 
Suzy: 17 
0

un modo veloce per fare questo senza importare le librerie :

print('\n'.join([e["Name"] for e in thisismylist])) 
1

Il seguente codice dovrebbe funzionare perfettamente.

for var in thisismylist: 
    print var['Name'] 
Problemi correlati