julia - Wie finde ich den Schlüssel für den Min / Max-Wert eines Dict?

8

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.

    
tssch 13.10.2015, 20:21
quelle

3 Antworten

5

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)!

    
Dan Getz 14.10.2015, 03:28
quelle
8

Sie könnten reduce so verwenden, wodurch der Schlüssel zurückgegeben wird des ersten kleinsten Wertes in d :

%Vor%

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:

%Vor%

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.

    
user4235730 13.10.2015 22:00
quelle
3

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%     
David P. Sanders 13.10.2015 21:05
quelle

Tags und Links