J'ai une liste de dictionnaires comme celui-ci:
[{'value': 'apple', 'blah': 2},
{'value': 'banana', 'blah': 3} ,
{'value': 'cars', 'blah': 4}]
Je voudrais ['apple', 'banana', 'cars']
Quelle est la meilleure façon de procéder?
python
list
dictionary
SuperString
la source
la source
[d.value for d in l]
merci :)Voici une autre façon de le faire en utilisant les fonctions map () et lambda:
où l est la liste. Je vois cette façon "sexy", mais je le ferais en utilisant la compréhension de liste.
Mise à jour: au cas où cette «valeur» serait manquante comme clé, utilisez:
Mise à jour: Je ne suis pas non plus un grand fan de lambdas, je préfère nommer les choses ... voici comment je le ferais dans cet esprit:
J'irais même plus loin et créerais une fonction unique qui dit explicitement ce que je veux réaliser:
Avec Python 3, puisque
map
renvoie un itérateur, utilisezlist
pour renvoyer une liste, par exemplelist(map(operator.itemgetter('value'), l))
.la source
map
, utilisezoperator.itemgetter('value')
, pas alambda
.la source
getkey
.. tu veux dired.get('value')
? Ce serait la même chose que la deuxième compréhension de la liste de @ isbadawi, pas celle de Michal.Pour un cas très simple comme celui-ci, une compréhension, comme dans la réponse d'Ismail Badawi est définitivement la voie à suivre.
Mais lorsque les choses se compliquent et que vous devez commencer à écrire des compréhensions multi-clauses ou imbriquées avec des expressions complexes, cela vaut la peine de chercher d'autres alternatives. Il existe plusieurs méthodes (quasi) standard différentes pour spécifier des recherches de style XPath sur des structures dictées et listes imbriquées, telles que JSONPath, DPath et KVC. Et il y a de belles bibliothèques sur PyPI pour eux.
Voici un exemple avec la bibliothèque nommée
dpath
, montrant comment cela peut simplifier quelque chose d'un peu plus compliqué:Ou, en utilisant
jsonpath-ng
:Celui-ci peut ne pas sembler aussi simple à première vue, car
find
renvoie des objets de correspondance, qui incluent toutes sortes de choses en plus de la valeur correspondante, comme un chemin directement vers chaque élément. Mais pour des expressions plus complexes, être capable de spécifier un chemin comme'*.[*].value'
au lieu d'une clause de compréhension pour chacune*
peut faire une grande différence. De plus, JSONPath est une spécification indépendante du langage, et il existe même des testeurs en ligne qui peuvent être très utiles pour le débogage.la source
Je pense aussi simple que ci-dessous vous donnerait ce que vous recherchez.
Vous pouvez le faire avec une combinaison de
map
etlambda
, mais la compréhension de la liste semble plus élégante et pythonique.Pour une plus petite compréhension de la liste d'entrée est la voie à suivre, mais si l'entrée est vraiment grande, je suppose que les générateurs sont le moyen idéal.
Voici une comparaison de toutes les solutions possibles pour une contribution plus importante
Comme vous pouvez le voir, les générateurs sont une meilleure solution par rapport aux autres, la carte est également plus lente que le générateur pour une raison que je laisserai à OP le soin de comprendre.
la source
Suivre l'exemple --
la source
Obtenir les valeurs clés de la liste des dictionnaires en python?
Ex:
pour d dans les données:
Production:
la source
Une façon très simple de le faire est:
Production:
la source