У меня есть список таких слов:
[{'value': 'apple', 'blah': 2},
{'value': 'banana', 'blah': 3} ,
{'value': 'cars', 'blah': 4}]
я хочу ['apple', 'banana', 'cars']
Какой лучший способ сделать это?
python
list
dictionary
Суперструнисты
источник
источник
[d.value for d in l]
спасибо :)Вот еще один способ сделать это с помощью функций map () и lambda:
где л список. Я вижу этот путь "самым сексуальным", но я бы сделал это, используя понимание списка.
Обновление: в случае, если это значение может отсутствовать в качестве ключа:
Обновление: я также не большой поклонник лямбд, я предпочитаю называть вещи ... вот как я бы сделал это с учетом этого:
Я бы даже пошел дальше и создал бы единственную функцию, которая явно говорит о том, чего я хочу достичь:
В Python 3, поскольку
map
возвращает итератор, используйтеlist
для возврата списка, напримерlist(map(operator.itemgetter('value'), l))
.источник
map
, используйтеoperator.itemgetter('value')
, а неlambda
.источник
getkey
.. ты имеешь в видуd.get('value')
? Это было бы то же самое, что и понимание второго списка @ isbadawi, а не Михала.Для очень простого случая, подобного этому, понимание, как в ответе Исмаила Бадави определенно является подходящим вариантом.
Но когда все усложняется, и вам нужно начать писать многоузловые или вложенные понимания со сложными выражениями в них, стоит поискать другие альтернативы. Существует несколько различных (квази) стандартных способов задания поиска в стиле XPath для вложенных структур dict-and-list, таких как JSONPath, DPath и KVC. И для них есть хорошие библиотеки на PyPI.
Вот пример с библиотекой
dpath
, которая показывает, как она может упростить что-то немного более сложное:Или, используя
jsonpath-ng
:На первый взгляд это может показаться не таким простым, потому что
find
возвращает совпадающие объекты, которые включают в себя все виды, кроме только совпадающего значения, например, путь непосредственно к каждому элементу. Но для более сложных выражений возможность указать путь, например,'*.[*].value'
вместо предложения для каждого из них,*
может иметь большое значение. Кроме того, JSONPath является независимой от языка спецификацией, и есть даже онлайн-тестеры, которые могут быть очень полезны для отладки.источник
Я думаю, что простое, как показано ниже, даст вам то, что вы ищете.
Вы можете сделать это с помощью комбинации
map
иlambda
но понимание списка выглядит более элегантно и питонно.Для меньшего входного списка понимание - путь, но если вход действительно большой, тогда я предполагаю, что генераторы - идеальный способ.
Вот сравнение всех возможных решений для большего вклада
Как вы можете видеть, генераторы - лучшее решение по сравнению с другими, карта также медленнее по сравнению с генератором по причине, которую я оставлю до OP, чтобы выяснить.
источник
Следуй примеру --
источник
Получить значения ключей из списка словарей в Python?
Пример:
для д в данных:
Вывод:
источник
Очень простой способ сделать это:
Вывод:
источник