我想在 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现有的创建一个,它将按其键的升序对条目进行排序:Dictsort
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 次 |
| 最近记录: |