Получение списка значений из списка dicts
У меня есть список dicts, подобный этому:
[{'value': 'apple', 'blah': 2}, {'value': 'banana', 'blah': 3} , {'value': 'cars', 'blah': 4}]
Я хочу ['apple', 'banana', 'cars']
['apple', 'banana', 'cars']
Какой лучший способ сделать это?
Переведено автоматически
Ответ 1
Предполагая, что у каждого dict есть value ключ, вы можете написать (предполагая, что ваш список имеет имя l)
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)).
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)
Вывод: