Julia 如何根据字典排序';朱莉娅的钥匙是什么?

Julia 如何根据字典排序';朱莉娅的钥匙是什么?,julia,Julia,我想在Julia中对以下字典进行排序,以便键值按键名的字母顺序打印 fruits = Dict("Mangoes" => 5, "Pomegranates" => 4, "Apples" => 8); 执行上述代码并输入水果,我得到的输出如下: fruits Dict{String,Int64} with 3 entries: "Pomegranates" => 4 "Apples" => 8 "Mangoes" => 5

我想在Julia中对以下字典进行排序,以便键值按键名的字母顺序打印

fruits = Dict("Mangoes" => 5, "Pomegranates" => 4, "Apples" => 8);
执行上述代码并输入
水果
,我得到的输出如下:

fruits
Dict{String,Int64} with 3 entries:
  "Pomegranates" => 4
  "Apples"       => 8
  "Mangoes"      => 5
不过,我预期会有以下结果:

Apples       => 8
Mangoes      => 5
Pomegranates => 4
试试这个:

fruits = Dict("Mangoes" => 5, "Pomegranates" => 4, "Apples" => 8);
for key in sort(collect(keys(fruits)))
  println("$key => $(fruits[key])")
end
它给出了以下结果:

Apples => 8
Mangoes => 5
Pomegranates => 4
这是因为在Julia中(
Dict
)没有顺序:每个字典维护一组键。当一个人在这个集合上迭代时,他获取键的顺序没有定义,并且随着他插入新的条目而变化。可以做两件事来确保按特定顺序迭代字典条目


第一种方法是获取密钥集(使用)并自行排序,正如另一个答案中所建议的:

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
,注意按顺序插入键,然后保留顺序。或者,只需使用
sort
,即可从现有的
Dict
创建一个
OrderedDict
,它将按照条目键的升序对条目进行排序:

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"

回答得好,你能不能加上一些参考资料,并提到在朱莉娅身上,口述是没有顺序的?这将清楚地说明为什么需要另一种类型的Dict。谢谢,我编辑了我的答案以包含更多细节。