2011-01-01 87 views
8

Tengo una lista li:Python: Obtener el índice del elemento de diccionario en la lista

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

que desea obtener el índice del elemento que tiene un cierto nombre. Por ejemplo, si pido "Tom" que debería darme: 0. "Pam" me debe dar 2.

+1

algún motivo usted no sólo tiene que utilizar un diccionario para empezar? – Keith

Respuesta

15

Es posible indexar los dicts por 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 

Si es necesario buscar una gran cantidad de éstos de la misma lista, la creación de un diccionario como se ha hecho en la respuesta de Satoru.Logic, va a ser mucho más eficiente

+1

+1, no sabía esto. Había asumido que este problema es demasiado trivial para tener una función de biblioteca como 'itemgetter' y siempre en bucle sobre los elementos dict: D – 0xc0de

+0

en python3 parece que el mapa debe ser envuelto en una lista para proporcionar el método de índice –

Cuestiones relacionadas