it-swarm.com.de

Wie extrahiere ich alle Werte eines bestimmten Schlüssels aus einer Liste von Wörterbüchern?

Ich habe eine Liste von Wörterbüchern, die alle dieselbe Struktur innerhalb der Liste haben. Zum Beispiel:

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

Ich möchte jedes value-Element aus jedem Wörterbuch in der Liste erhalten:

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

Ich kann natürlich die Liste durchlaufen und jeden Wert mithilfe einer for-Schleife extrahieren:

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

mein Datensatz ist jedoch ziemlich groß. Ich frage mich, ob es einen schnelleren Weg gibt.

21
James Mertz

Wenn Sie die Werte nur einmal durchlaufen müssen, verwenden Sie den Generatorausdruck:

generator = ( item['value'] for item in test_data )

...

for i in generator:
    do_something(i)

Eine andere (esoterische) Option könnte die Verwendung von map mit itemgetter sein - je nach den Umständen kann es etwas schneller als der Generatorausdruck sein oder nicht

from operator import itemgetter

generator = map(itemgetter('value'), test_data)

Und wenn Sie unbedingt eine Liste benötigen, ist ein Listenverständnis schneller als das iterierte list.append.

results = [ item['value'] for item in test_data ]
21
Antti Haapala

Du kannst das:

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

Wenn Ihre Daten wirklich groß sind, wird ein Generator effizienter sein:

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

ex:

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

Der Generatorteil ist dieser:

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

Wenn Sie das in eine list() einhüllen, erschöpfen Sie den Generator und geben seine Werte in einem Array zurück.

0
agconti