我想在 Julia 中对以下字典进行排序,键值按键名称的字母顺序打印。
fruits = Dict("Mangoes" => 5, "Pomegranates" => 4, "Apples" => 8);
Run Code Online (Sandbox Code Playgroud)
执行上述代码并输入fruits
,我得到的输出为:
fruits
Dict{String,Int64} with 3 entries:
"Pomegranates" => 4
"Apples" => 8
"Mangoes" => 5
Run Code Online (Sandbox Code Playgroud)
但是,我期望以下结果:
Apples => 8
Mangoes => 5
Pomegranates => 4
Run Code Online (Sandbox Code Playgroud)
这是因为Julia () 中的字典Dict
是无序的:每个字典都维护一组键。当迭代此集合时获取键的顺序未定义,并且可能会随着插入新条目而变化。可以做两件事来确保以特定顺序迭代字典条目。
第一种方法是获取键集(使用keys
)并自行排序,正如另一个答案中所提出的:
julia> fruits = Dict("Mangoes" => 5, "Pomegranates" => 4, "Apples" => 8);
julia> for key in sort!(collect(keys(fruits)))
val = fruits[key]
println("$key => $val")
end
Apples => 8
Mangoes => 5
Pomegranates => 4
Run Code Online (Sandbox Code Playgroud)
话虽这么说,如果键的顺序很重要,人们可能希望通过使用有序字典(OrderedDict)在类型系统中反映这一事实,有序字典是一种数据结构,其中条目的顺序是有意义的。更准确地说, anOrderedDict
保留其条目的插入顺序。
人们可以OrderedDict
从头开始创建一个,按顺序插入键,并且顺序将被保留。或者可以简单地使用OrderedDict
现有的创建一个,它将按其键的升序对条目进行排序:Dict
sort
julia> using OrderedCollections
julia> fruits = Dict("Mangoes" => 5, "Pomegranates" => 4, "Apples" => 8);
julia> ordered_fruits = sort(fruits)
OrderedDict{String,Int64} with 3 entries:
"Apples" => 8
"Mangoes" => 5
"Pomegranates" => 4
julia> keys(ordered_fruits)
Base.KeySet for a OrderedDict{String,Int64} with 3 entries. Keys:
"Apples"
"Mangoes"
"Pomegranates"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1804 次 |
最近记录: |