Obtener una lista de valores a partir de una lista de dicts

Tengo una lista de dictos así:

[{'value': 'apple', 'blah': 2}, 
 {'value': 'banana', 'blah': 3} , 
 {'value': 'cars', 'blah': 4}]

Quiero ['manzana', 'plátano', 'coches'].

¿Cuál es la mejor manera de hacerlo?

Solución

Asumiendo que cada dict tiene una clave value, puedes escribir (asumiendo que tu lista se llama l)

[d['value'] for d in l]

Si falta value, puedes usar

[d['value'] for d in l if 'value' in d]
Comentarios (1)

He aquí otra forma de hacerlo utilizando map() y funciones lambda:

>>> map(lambda d: d['value'], l)

donde l es la lista. Veo esta forma "más sexy", pero yo lo haría utilizando la comprensión de la lista.

Actualización: En caso de que 'valor' pudiera faltar como clave uso:

>>> map(lambda d: d.get('value', 'default value'), l)

Actualización: Yo tampoco soy muy fan de las lambdas, prefiero nombrar las cosas... así es como lo haría yo teniendo eso en cuenta:

>>> import operator
>>> map(operator.itemgetter('value'), l)

Incluso iría más allá y crearía una única función que dijera explícitamente lo que quiero conseguir:

>>> import operator, functools
>>> get_values = functools.partial(map, operator.itemgetter('value'))
>>> get_values(l)
... []

Con Python 3, como map devuelve un iterador, usa list para devolver una lista, por ejemplo list(map(operator.itemgetter('value'), l)).

Comentarios (3)
[x['value'] for x in list_of_dicts]
Comentarios (4)