2011-01-01 14 views
8

Ho una lista li:Python: Get indice della voce del dizionario nella lista

[ 
{name: "Tom", age: 10}, 
{name: "Mark", age: 5}, 
{name: "Pam", age: 7} 
] 

voglio ottenere l'indice della voce che ha un certo nome. Ad esempio, se chiedo per "Tom" dovrebbe dare me: 0. "Pam" dovrebbe darmi 2.

+1

Qualche ragione per cui non usi un dizionario solo per cominciare? – Keith

risposta

15

Si può indicizzare i dicts di name

people = [ {'name': "Tom", 'age': 10}, {'name': "Mark", 'age': 5} ] 
name_indexer = dict((p['name'], i) for i, p in enumerate(people)) 
name_indexer.get('Tom', -1) 
25
>>> from operator import itemgetter 
>>> map(itemgetter('name'), li).index('Tom') 
0 
>>> map(itemgetter('name'), li).index('Pam') 
2 

Se necessario cercare un sacco di questi dalla stessa lista, creando un dict come fatto nella risposta di Satoru.Logic, sarà molto più efficace

+1

+1, non lo sapevo. Avevo pensato che questo problema fosse troppo banale per avere una funzione di libreria come 'itemgetter' e sempre in loop sugli elementi dict: D – 0xc0de

+0

in python3 sembra che la mappa debba essere racchiusa in un elenco per fornire il metodo index –

Problemi correlati