Вопрос-Ответ

Getting a list of values from a list of dicts

Получение списка значений из списка dicts

У меня есть список dicts, подобный этому:

[{'value': 'apple', 'blah': 2}, 
{'value': 'banana', 'blah': 3} ,
{'value': 'cars', 'blah': 4}]

Я хочу ['apple', 'banana', 'cars']

Какой лучший способ сделать это?

Переведено автоматически
Ответ 1

Предполагая, что у каждого dict есть value ключ, вы можете написать (предполагая, что ваш список имеет имя l)

[d['value'] for d in l]

Если value может отсутствовать, вы можете использовать

[d['value'] for d in l if 'value' in d]
Ответ 2

Вот еще один способ сделать это с помощью map() и лямбда-функций:

>>> map(lambda d: d['value'], l)

где l - список.
Я считаю этот способ "самым сексуальным", но я бы сделал это, используя понимание списка.

Обновление: На случай, если это "значение" может отсутствовать в качестве ключа, используйте:

>>> map(lambda d: d.get('value', 'default value'), l)

Обновление: Я также не большой поклонник лямбд, я предпочитаю называть вещи... вот как я бы это сделал, имея это в виду:

>>> import operator
>>> get_value = operator.itemgetter('value')
>>> map(get_value, l)

Я бы даже пошел дальше и создал единственную функцию, которая явно говорит, чего я хочу достичь:

>>> import operator, functools
>>> get_value = operator.itemgetter('value')
>>> get_values = functools.partial(map, get_value)
>>> get_values(l)
... [<list of values>]

В Python 3, поскольку map возвращает итератор, используйте list для возврата списка, например, list(map(operator.itemgetter('value'), l)).

Ответ 3
[x['value'] for x in list_of_dicts]
Ответ 4

Использование понимания списка

ввод:

d = [{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3}, {'value': 'cars', 'blah': 4}]


values = [i['value'] for i in d]

print(values)

Вывод:

['apple', 'banana', 'cars']
python list dictionary