J'ai une liste de dictionnaires qui ont tous la même structure dans la liste. Par exemple:
test_data = [{'id':1, 'value':'one'}, {'id':2, 'value':'two'}, {'id':3, 'value':'three'}]
Je souhaite obtenir chacun des éléments value
de chaque dictionnaire de la liste:
['one', 'two', 'three']
Je peux bien sûr parcourir la liste et extraire chaque valeur à l'aide d'une boucle for:
results = []
for item in test_data:
results.append(item['value'])
cependant, mon ensemble de données est assez volumineux. Je me demande s'il existe un moyen plus rapide de procéder.
Si vous avez juste besoin de parcourir les valeurs une fois, utilisez l'expression du générateur:
generator = ( item['value'] for item in test_data )
...
for i in generator:
do_something(i)
Une autre option (ésotérique) pourrait être d'utiliser map
avec itemgetter
- elle pourrait être légèrement plus rapide que l'expression du générateur, ou non, selon les circonstances:
from operator import itemgetter
generator = map(itemgetter('value'), test_data)
Et si vous avez absolument besoin d'une liste, une compréhension de la liste est plus rapide que list.append
itérée, ainsi:
results = [ item['value'] for item in test_data ]
Tu peux le faire:
result = map (lambda x:x['value'],test_data)
Si vos données sont vraiment volumineuses, un générateur sera plus efficace:
list((object['value'] for object in test_data))
ex:
>>> list((object['value'] for object in test_data))
['one', 'two', 'three']
La partie génératrice est la suivante:
(object['value'] for object in test_data)
En encapsulant cela dans une list()
, vous épuisez le générateur et renvoyez bien ses valeurs dans un tableau.