J'ai une liste de dictionnaires comme ceci:
[{'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 trouvé dans un autre article SO), donc s'il n'y a pas d'autre moyen, je ne suis pas coincé. Cependant, d'après ce que j'ai vu, il y a presque toujours un moyen direct en Python, c'est donc l'occasion pour moi d'en apprendre un peu plus.
seq
, et que la liste est grande, cela peut être inefficace car la mémoire de la liste entière doit être allouée uniquement pour trouver le maximum.AttributeError: module 'sys' has no attribute 'maxint'
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 également quel article est le plus cher.
la source
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 la surcharge 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!
la source
Une réponse serait de mapper vos dictats sur la valeur d'intérêt dans une expression de générateur, puis d'appliquer les éléments intégrés
min
etmax
.myMax = max(d['price'] for d in myList) myMin = min(d['price'] for d in myList)
la source
[
et]
et génèrent en fait une liste Python comme étape intermédiaire.peut également utiliser ceci:
from operator import itemgetter lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}] max(map(itemgetter('price'), lst))
la source