J'ai une liste de dictionnaires comme ça:
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
Je veux trouver les prix min () et max (). Maintenant, je peux trier cela assez facilement en utilisant une clé avec une expression lambda (comme on le trouve dans un autre article SO), donc s'il n'y a pas d'autre moyen, je ne suis pas coincé. Cependant, de quoi J'ai vu qu'il y a presque toujours un moyen direct en Python, c'est donc l'occasion pour moi d'en apprendre un peu plus.
Il existe plusieurs options. En voici un simple:
seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)
[Modifier]
Si vous ne souhaitez parcourir la liste qu'une seule fois, vous pouvez essayer ceci (en supposant que les valeurs peuvent être représentées par int
s):
import sys
lo,hi = sys.maxint,-sys.maxint-1
for x in (item['the_key'] for item in dict_list):
lo,hi = min(x,lo),max(x,hi)
lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
maxPricedItem = max(lst, key=lambda x:x['price'])
minPricedItem = min(lst, key=lambda x:x['price'])
Cela vous indique non seulement quel est le prix maximum, mais aussi quel article est le plus cher.
Je pense que l'expression la plus directe (et la plus pythonique) serait quelque chose comme:
min_price = min(item['price'] for item in items)
Cela évite les frais généraux de tri de la liste - et, en utilisant une expression de générateur, au lieu d'une compréhension de liste - évite également de créer des listes. Efficace, direct, lisible ... Pythonique!
Une réponse serait de mapper vos dicts à la valeur d'intérêt à l'intérieur d'une expression de générateur, puis d'appliquer les fonctions intégrées min
et max
.
myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)
peut également utiliser ceci:
from operator import itemgetter
lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
max(map(itemgetter('price'), lst))