Étant donné un dictionnaire:Comment accéder aux tuples de valeur-clé dans l'ordre avant/arrière pour Dict et SortedDict? - Julia
> d = Dict{Int, Int}(1=>123, 2=>51, 4=>23)
Dict{Int64,Int64} with 3 entries:
4 => 23
2 => 51
1 => 123
je pouvais accéder à la valeur d'un dictionnaire par sa clé, par exemple:
> d[4]
23
Ou je pourrais en boucle à travers les paires clé-valeur en tant que tels:
> for i in d
println(i)
end
4=>23
2=>51
1=>123
J'ai essayé d'accéder à la clé en tant que premier élément de la liste ou même i.key
, mais cela ne semble pas être la bonne syntaxe:
julia> for i in d
println(i.key)
end
ERROR: type Pair has no field key
in macro expansion; at ./REPL[22]:2 [inlined]
in anonymous at ./<missing>:?
julia> for i in d
println(i[0])
end
ERROR: BoundsError: attempt to access 4=>23
at index [0]
in getindex(::Pair{Int64,Int64}, ::Int64) at ./operators.jl:609
in macro expansion; at ./REPL[23]:2 [inlined]
in anonymous at ./<missing>:?
Et puis je me suis souvenu que Julia n'est pas l'indice 0e, il devrait donc être:
> for i in d
println(i[1], ' ', i[2])
end
4 23
2 51
1 123
> for i in d
println(i[1], ' ', i[2])
end
4 23
2 51
1 123
Dans ce cas est le BoundsError
un peu comme IndexError
de Python lorsqu'un index de la liste n » t trouvé?
L'autre partie de la question est sur SortedDict
, comment puis-je accéder au dernier élément Nième dans le SortedDict
?
J'ai essayé d'utiliser la syntaxe d'index et j'ai récupéré la valeur mais pas le nombre de (key,value)
.
julia> import DataStructures: SortedDict
julia> sd = SortedDict(d)
DataStructures.SortedDict{Int64,Int64,Base.Order.ForwardOrdering} with 3 entries:
1 => 123
2 => 51
4 => 23
julia> sd[end]
23
Aussi, comment puis-je trier le dictionnaire en fonction de la valeur?
Et, enfin, comment inverser le dict trié?
J'ai essayé d'utiliser Base.Order.ReverseOrding
mais il a jeté un MethodError
:
julia> sd = SortedDict{Base.Order.ReverseOrdering}(d)
ERROR: MethodError: Cannot `convert` an object of type Dict{Int64,Int64} to an object of type DataStructures.SortedDict{Base.Order.ReverseOrdering,D,Ord<:Base.Order.Ordering}
This may have arisen from a call to the constructor DataStructures.SortedDict{Base.Order.ReverseOrdering,D,Ord<:Base.Order.Ordering}(...),
since type constructors fall back to convert methods.
in DataStructures.SortedDict{Base.Order.ReverseOrdering,D,Ord<:Base.Order.Ordering}(::Dict{Int64,Int64}) at ./sysimg.jl:53
cette question est beaucoup à mâcher. à l'avenir, envisagez de le diviser en deux questions ... –
Veuillez poser chaque question séparément. En outre, il n'est pas utile d'inclure la tentative avec des paires d'indexation par '0'. Si vous souhaitez poser des questions sur 'BoundsError', cela peut également être fait séparément. –