Ich möchte den Schlüssel finden, der dem Min- oder Max-Wert eines Wörterbuchs in Julia entspricht. In Python würde ich folgendes tun:
%Vor%Was würde den Schlüssel 2 zurückgeben.
Wie kann ich das gleiche in Julia machen?
%Vor%Letzteres gibt 1 = & gt; 20 statt 2 = & gt; 10 oder 2 zurück.
Eine andere Option ist:
%Vor% es hängt von Eigenschaften von Schlüsseln und Werten ab, Iteratoren, die nicht garantiert sind, aber tatsächlich für Dicts funktionieren (und sind für OrderedDicts garantiert). Wie die Antwort reduce
muss d
nicht leer sein.
warum erwähnen Sie dies, wenn die reduce
, so ziemlich Nägel? es ist 3 bis 4 mal schneller (zumindest auf meinem Computer)!
Sie könnten reduce
so verwenden, wodurch der Schlüssel zurückgegeben wird des ersten kleinsten Wertes in d
:
Dies funktioniert jedoch nur für nicht-leere Dict
s. (Aber die Vorstellung des "Schlüssels des minimalen Wertes von keinen Werten" macht keinen Sinn, daher sollte dieser Fall normalerweise separat gehandhabt werden.)
Bearbeiten Sie die Effizienz.
Betrachten Sie diese Definitionen (von denen keine leere Sammlungen behandeln) ...
%Vor%... zusammen mit diesem Code:
%Vor% Wenn Sie benchmark(10000000)
aufrufen, wird etwas wie folgt gedruckt:
Daraus können wir sehen, dass m2
(aus benutzer3580870s Antwort ) tatsächlich schneller ist als meine ursprüngliche Lösung m1
um einen Faktor von etwa 3 bis 4 und verbraucht auch weniger Speicher. Dies ist anscheinend auf den Funktionsaufruf-Overhead zurückzuführen, aber auch darauf, dass der λ-Ausdruck in m1
nicht sehr gut optimiert ist. Wir können das zweite Problem lindern, indem wir eine Hilfsfunktion wie in m3
definieren, was besser ist als m1
, aber nicht so gut wie m2
.
Jedoch weist m2
immer noch O (n) Speicher zu, was vermieden werden kann: Wenn Sie wirklich die Effizienz benötigen, sollten Sie eine explizite Schleife wie in m4
verwenden, die fast alloziert keine Erinnerung und ist auch schneller.
Wenn Sie nur den Mindestwert benötigen, können Sie
verwenden %Vor%Wenn Sie auch den Schlüssel brauchen, ich kenne keine eingebaute Funktion dafür, aber Sie können ihn für numerische Schlüssel und Werte leicht selbst schreiben:
%Vor%Tags und Links dictionary julia-lang