Frage

Ich habe eine Liste von Wörterbüchern wie SO:

[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]

Ich möchte die Preise für min () und max () finden. Jetzt kann ich dies leicht genug mit einem Schlüssel mit einem Lambda -Ausdruck sortieren (wie in einem anderen Artikel gefunden). Wenn es also keinen anderen Weg gibt, stecke ich nicht fest. Nach dem, was ich gesehen habe, gibt es in Python jedoch fast immer einen direkten Weg, also ist dies eine Gelegenheit für mich, ein bisschen mehr zu lernen.

War es hilfreich?

Lösung

Es gibt mehrere Optionen. Hier ist ein direkter:

seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)

Bearbeiten

Wenn Sie nur einmal durch die Liste iterieren wollten, können Sie dies versuchen (vorausgesetzt, die Werte könnten als ints):

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)

Andere Tipps

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'])

Dies sagt Ihnen nicht nur, was der maximale Preis ist, sondern auch welcher Artikel am teuersten ist.

Ich denke, der direkteste (und pythonischste) Ausdruck wäre so etwas wie:

min_price = min(item['price'] for item in items)

Dies vermeidet den Overhead, die Liste zu sortieren - und durch Verwendung eines Generatorausdrucks anstelle eines Listenverständnisses - auch das Erstellen von Listen zu erstellen. Effizient, direkt, lesbar ... pythonisch!

Eine Antwort würde sein, Ihre Diktate auf den Wert von Interesse innerhalb eines Generatorausdrucks abzubilden und dann die integrierten Ins anzuwenden min und max.

myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)

kann dies auch verwenden:

from operator import itemgetter

lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]  
max(map(itemgetter('price'), lst))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top