2015-04-24 14 views
9

Ho creato un dizionario di due array utilizzando zip() comeÈ possibile ordinare un dizionario in Julia?

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

Ora voglio ordinare questo dizionario da key(list1) o list2. Qualcuno può mostrarmi un modo o una funzione, come realizzarlo?

+6

Il Dict in base non è ordinato, ma è possibile utilizzare SortedDict dal pacchetto DataStructures.jl: https://github.com/JuliaLang/DataStructures.jl – spencerlyon2

risposta

13

(voluto aggiungere un commento a @ risposta di Simon, ma non abbastanza rep)

Sort prende anche una parola chiave by, il che significa che si può fare

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) 

noti inoltre che v'è un SortedDict in DataStructures.jl, che mantiene ordinamento, e c'è un OrderedDict che mantiene inserimento ordine. Infine, c'è una richiesta di pull che consentirebbe l'ordinamento diretto di OrderedDicts (ma ho bisogno di finirlo e commetterlo).

+0

Una risposta più concisa e migliore della mia quando si ordina per valori. – Simon

4

Mentre SortedDict può essere utile se è necessario mantenere il dizionario ordinato, è spesso necessario solo per ordinare l'dizionario per l'uscita, in questo caso, può essere ciò che è necessario il seguente:

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

... che produce:

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

Siamo in grado di ordinare in base a valori con:

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

... che dà:

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

grazie mille per la tua risposta utile. Penso che questo sia un buon modo per ordinare una tale struttura di dati. – team17

Problemi correlati