Как извлечь все значения определенного ключа из списка словарей?

У меня есть список словарей, которые имеют одну и ту же структуру в списке. Например:

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

Я хочу получить каждый из элементов value из каждого словаря в списке:

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

Я могу, конечно, перебирать список и извлекать каждое значение с помощью цикла for:

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

однако мой набор данных довольно велик. Мне интересно, есть ли более быстрый способ для этого.

Ответы

Ответ 1

Если вам просто нужно перебирать значения один раз, используйте выражение генератора:

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

...

for i in generator:
    do_something(i)

Другой (эзотерический) вариант может заключаться в использовании map с itemgetter - он может быть немного быстрее, чем выражение генератора, или нет, в зависимости от обстоятельств:

from operator import itemgetter

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

И если вам абсолютно нужен список, понимание списка выполняется быстрее, чем повторение list.append, таким образом:

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

Ответ 2

Вы можете сделать это:

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

Ответ 3

Если ваши данные действительно велики, generator будет более эффективным:

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

Пример:

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

Часть генератора такова:

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

Обернув, что в list(), вы исчерпаете генератор и хорошо возвращаете его значения в массиве.