Wie bekomme ich den Schlüssel zu dem Eintrag, der den Mindestwert enthält, wenn ich ein Python-Wörterbuch habe?
Ich habe über etwas nachgedacht, das mit der min()
Funktion zu tun hat ...
Angesichts der Eingabe:
{320:1, 321:0, 322:3}
Es würde zurückkehren 321
.
Antworten:
Am besten:
min(d, key=d.get)
- kein Grund, eine nutzloselambda
Indirektionsebene einzulegen oder Elemente oder Schlüssel zu extrahieren!quelle
[11, 22, 33]
, z{1: 11, 2:22, 3:33}
. B. anstelle eines Wörterbuchs, z . 'd.get' gilt für ein Wörterbuch, jedoch nicht für eine Liste.d={"a":[10, None], "b":[20, None]}
die min aus d [Taste] [0] berechnet wird?min()
Geben Sie den Wert im ersten Wert in sortiert zurück. Schlüssel geben die Art und Weise an, wie die Werte sortiert werden.key=d.get
bedeutet, dass die Liste nach Werten des Wörterbuchs sortiert wird.Hier ist eine Antwort, die tatsächlich die vom OP angeforderte Lösung liefert:
Die Verwendung
d.iteritems()
ist jedoch für größere Wörterbücher effizienter.quelle
operator.itemgetter(1)
.Für mehrere Schlüssel mit gleichem niedrigsten Wert können Sie ein Listenverständnis verwenden:
Eine äquivalente funktionale Version:
quelle
min(d.items(), key=lambda x: x[1])[0]
quelle
quelle
key=d.get
ist besser.Für den Fall, dass Sie mehrere Minimalschlüssel haben und es einfach halten möchten
quelle
Wenn Sie nicht sicher sind, dass Sie nicht mehrere Mindestwerte haben, würde ich vorschlagen:
quelle
Bearbeiten: Dies ist eine Antwort auf die ursprüngliche Frage des OP zum Minimalschlüssel, nicht zur Minimalantwort.
Mit der
keys
Funktion können Sie die Tasten des Diktats abrufen und mit Rechtmin
das Minimum dieser Liste ermitteln.quelle
Ein weiterer Ansatz zur Behebung des Problems mehrerer Schlüssel mit demselben Mindestwert:
quelle
Verwendung
min
mit einem Iterator (für Python 3items
anstelle voniteritems
); Verwenden Sie anstelle von Lambda denitemgetter
Operator from, der schneller als Lambda ist.quelle
quelle
Ich habe verglichen, wie die folgenden drei Optionen funktionieren:
Beispielausgabe:
quelle
Um eine ordentliche Klasse zu erstellen, müssen Sie 6 Sonderfunktionen überschreiben, damit sie von der Funktion min () aufgerufen werden
Diese Methoden sind
__lt__ , __le__, __gt__, __ge__, __eq__ , __ne__
in der Reihenfolge, dass sie kleiner, kleiner oder gleich, größer als, größer oder gleich, gleich, nicht gleich sind. Sie sollten__lt__
beispielsweise Folgendes implementieren :dann können Sie die min-Funktion wie folgt verwenden:
das hat bei mir funktioniert.
quelle
Verwenden Sie die Zip-Funktion, um einen Iterator von Tupeln zu erstellen, der Werte und Schlüssel enthält. Wickeln Sie es dann mit einer Min-Funktion ein, die das Minimum basierend auf der ersten Taste annimmt. Dies gibt ein Tupel zurück, das ein Paar (Wert, Schlüssel) enthält. Der Index von [1] wird verwendet, um den entsprechenden Schlüssel zu erhalten
quelle
quelle
min()
) neu zu implementieren .Suchst du danach?
Druckt 'vierzehn'
quelle