Come estrarre tutti i valori di una chiave specifica da un elenco di dizionari?

Ho una lista di dizionari che hanno tutti la stessa struttura all’interno della lista. Per esempio:

test_data = [{'id':1, 'value':'one'}, {'id':2, 'value':'two'}, {'id':3, 'value':'three'}] 

Voglio ottenere ciascuno degli elementi di value da ciascun dizionario nell’elenco:

 ['one', 'two', 'three'] 

Ovviamente posso scorrere l’elenco ed estrarre ogni valore usando un ciclo for:

 results = [] for item in test_data: results.append(item['value']) 

tuttavia il mio set di dati è abbastanza grande. Mi chiedo se c’è un modo più veloce per questo.

Se hai solo bisogno di scorrere i valori una volta, usa l’espressione del generatore:

 generator = ( item['value'] for item in test_data ) ... for i in generator: do_something(i) 

Un’altra opzione (esoterica) potrebbe essere quella di usare la map con itemgetter – potrebbe essere leggermente più veloce dell’espressione del generatore o meno, a seconda delle circostanze:

 from operator import itemgetter generator = map(itemgetter('value'), test_data) 

E se hai assolutamente bisogno di una lista, la comprensione di una lista è più veloce della list.append iterata. list.append , quindi:

 results = [ item['value'] for item in test_data ] 

Puoi farlo:

 result = map (lambda x:x['value'],test_data) 

Se i tuoi dati sono veramente grandi, un generatore sarà più efficiente:

 list((object['value'] for object in test_data)) 

ex:

 >>> list((object['value'] for object in test_data)) ['one', 'two', 'three'] 

La parte del generatore è questa:

 (object['value'] for object in test_data) 

Racchiudendolo in un list() , si estingue il generatore e si restituiscono i suoi valori in modo corretto in un array.