我想在Julia中对以下字典进行排序,以便按键名的字母顺序打印键值。
fruits = Dict("Mangoes" => 5, "Pomegranates" => 4, "Apples" => 8);
执行上面的代码并输入后fruits
,我得到的输出为:
fruits
Dict{String,Int64} with 3 entries:
"Pomegranates" => 4
"Apples" => 8
"Mangoes" => 5
但是,我希望得到以下结果:
Apples => 8
Mangoes => 5
Pomegranates => 4
这是因为字典中的朱莉娅(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
话虽如此,如果键的顺序很重要,则可能希望通过使用有序字典(OrderedDict)在类型系统中反映这一事实,该字典是一种数据结构,其中的条目顺序是有意义的。更准确地说,一个OrderedDict
保存将保留其条目插入的顺序。
可以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"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句