Option 1
Die Stromquelle Julia code zeigt an, dass die Schlüssel und vals eines Objekts als Dict()
Array
Objekte gespeichert sind, die geordnet. So können Sie einfach values()
und keys()
separat verwenden, wie in Ihrer Frage Formulierung. Es ist jedoch gefährlich, sich auf Details zu verlassen, die nicht dokumentiert sind, da sie ohne vorherige Ankündigung geändert werden können.
Option 2
Ein OrderedDict
vom DataStructures
Paket (zusammen mit den Funktionen values()
und keys()
) ist wahrscheinlich die einfachste und sicherste Weg, um sicher konsistenter Ordnung zu sein. Es ist in Ordnung, wenn Sie die Bestellung nicht speziell benötigen.
Option 3
Wenn Sie nicht mit dem zusätzlichen Aufwand für die Installation und das Laden des DataStructures
Paket beschäftigen möchten, können Sie nur die für den Umgang mit dieser Art der Sache in Syntax Julia gebaut, zum Beispiel
Mydict = Dict("a" => 1, "b" => 2, "c" => 1)
a = [(key, val) for (key, val) in Mydict]
Die Verwendung von zip()
wie in der Frage Formulierung gegeben kommt noch hinzu, Komplexität und Risiken in dieser Situation.
Wenn Sie die Entitäten trennen möchten, können Sie dann verwenden:
Keys = [key for (key, val) in Mydict]
Values = [val for (key, val) in Mydict]
oder beziehen sich nur auf a[idx][1]
für das idx
Element Keys
, wenn Sie es brauchen.
Ich werde feststellen, dass in der Definition des Wörterbuchtyps im Quellcode (https://github.com/JuliaLang/julia/blob/master/base/dict.jl) die Schlüssel und Werte als Array gespeichert werden Objekte, die geordnet sind. Daher bin ich mir ziemlich sicher, dass sie ihre Bestellung aufrechterhalten werden, aber ich konnte nicht darauf schwören. –
Beachten Sie auch den 'OrderedDict' Typ im' DataStructures' Modul. Dieser garantiert garantiert die bestellte Bestellung. Es gibt ein bisschen mehr Aufwand, aber nicht viel. Und da Sie sich nicht auf ein "unter der Haube", undokumentiertes Problem im Quellcode verlassen, das durch die gleichen Versionen beibehalten wird, ist es wahrscheinlich ein bisschen sicherer. –
@MichaelOhlrogge Ja, mit Blick auf 'dict.jl' sehe ich, dass' Werte (Dict) 'und' Schlüssel (Dict) 'einfach das' Dict' iterieren und den Schlüssel bzw. den Wert jedes Elements extrahieren. Daher sind sie in der gleichen Reihenfolge. Es wäre jedoch schöner, wenn dies in der Dokumentation garantiert wäre. Hoffentlich wird sich das in Zukunft nicht ändern. – becko