How do I extract all the values of a specific key from a list of dictionaries?

Question:

I have a list of dictionaries that all have the same structure within the list. For example:

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

I want to get each of the value items from each dictionary in the list:

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

I can of course iterate through the list and extract each value using a for loop:

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

however my data set is quite large. I’m wondering if there’s a faster way to this.

Asked By: James Mertz

||

Answers:

If you just need to iterate over the values once, use the generator expression:

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

...

for i in generator:
    do_something(i)

Another (esoteric) option might be to use map with itemgetter – it could be slightly faster than the generator expression, or not, depending on circumstances:

from operator import itemgetter

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

And if you absolutely need a list, a list comprehension is faster than iterated list.append, thus:

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

You can do this:

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

If your data is truly large, a generator will be more efficient:

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

ex:

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

The generator portion is this:

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

By wrapping that in a list(), you exhaust the generator and return its values nicely in an array.

Answered By: agconti
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.