Как извлечь все значения определенного ключа из списка словарей?
У меня есть список словарей, которые имеют одну и ту же структуру в списке. Например:
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()
, вы исчерпаете генератор и хорошо возвращаете его значения в массиве.