Tengo una lista de diccionarios como este:
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
Quiero encontrar los precios min () y max (). Ahora, puedo ordenar esto con bastante facilidad usando una clave con una expresión lambda (como se encuentra en otro artículo de SO), por lo que si no hay otra forma, no estoy atascado. Sin embargo, por lo que he visto, casi siempre hay una forma directa en Python, por lo que esta es una oportunidad para aprender un poco más.
seq
, y la lista es grande, esto puede ser ineficiente ya que la memoria para toda la lista debe asignarse solo para encontrar el máximo.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'])
Esto le indica no solo cuál es el precio máximo, sino también qué artículo es más caro.
fuente
Creo que la expresión más directa (y más pitónica) sería algo como:
min_price = min(item['price'] for item in items)
Esto evita la sobrecarga de ordenar la lista y, al usar una expresión generadora, en lugar de una comprensión de lista, en realidad también evita la creación de listas. Eficiente, directo, legible ... ¡Pythonic!
fuente
Una respuesta sería mapear sus dictados con el valor de interés dentro de una expresión generadora y luego aplicar los elementos integrados
min
ymax
.myMax = max(d['price'] for d in myList) myMin = min(d['price'] for d in myList)
fuente
[
y]
, y en realidad generan una lista de Python como paso intermedio.también puede usar esto:
from operator import itemgetter lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}] max(map(itemgetter('price'), lst))
fuente