2015-04-24 14 views
9

Ich habe einen Wörterbuch aus zwei Arrays erstellt zip() wieIst es möglich, ein Wörterbuch in Julia zu sortieren?

list1 = [1,2,3,4,5] 
list2 = [6,7,8,9,19] 
dictionary1 = Dict(zip(list1,list2)) 

nun von key(list1) oder durch list2 dieses Wörterbuch sortieren mag ich mit. Kann mir jemand einen Weg oder eine Funktion zeigen, wie kann ich es realisieren?

+6

Das Dict in der Basis ist unsortiert, aber Sie können SortedDict aus dem Paket DataStructures.jl verwenden: https://github.com/JuliaLang/DataStructures.jl – spencerlyon2

Antwort

13

(wollten einen Kommentar zu @ Simon Antwort, aber nicht genug rep hinzufügen)

Sortieren auch nimmt ein by Schlüsselwort, das bedeutet, dass Sie tun können,

julia> sort(collect(dictionary1), by=x->x[2]) 
5-element Array{Tuple{Int64,Int64},1}: 
(1,6) 
(2,7) 
(3,8) 
(4,9) 
(5,19) 

beachten Sie auch, dass es eine SortedDict in DataStructures.jl ist, die Sortierreihenfolge unterhält, und es gibt eine OrderedDict die Insertion aufrechterhält. Schließlich gibt es eine Pull-Anfrage, die eine direkte Sortierung von OrderedDicts erlauben würde (aber ich muss es beenden und begehen).

+0

Eine präzisere und bessere Antwort als meine, wenn nach Werten sortiert wird. – Simon

4

Während SortedDict nützlich sein kann, wenn es notwendig ist, um das Wörterbuch zu halten sortiert, ist es oft nur notwendig, das Wörterbuch für die Ausgabe zu sortieren, wobei in diesem Fall das Folgende, was erforderlich ist:

list1 = [1,2,3,4,5] 
list2 = [6,7,8,9,19] 
dictionary1 = Dict(zip(list1,list2)) 
sort(collect(dictionary1)) 

..., die erzeugt:

5-element Array{(Int64,Int64),1}: 
(1,6) 
(2,7) 
(3,8) 
(4,9) 
(5,19) 

Wir von Werten mit sortieren:

sort(collect(zip(values(dictionary1),keys(dictionary1)))) 

... das gibt:

5-element Array{(Int64,Int64),1}: 
(6,1) 
(7,2) 
(8,3) 
(9,4) 
(19,5) 
+0

vielen Dank für Ihre hilfreiche Antwort. Ich denke, das ist ein guter Weg, um eine solche Datenstruktur zu sortieren. – team17

Verwandte Themen