You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Julia中字典列表多键排序的广播保留错误

解决Julia字典列表多键排序的错误

你遇到的错误是因为Julia禁止对字典进行广播操作,你用的getindex.(x, ("lname", "fname"))属于广播写法,触发了预留限制导致报错。

下面是几种可行的解决方法:

方法1:直接构造排序元组(最简洁)

直接返回包含lname和fname的元组,Julia会按元组内的顺序依次比较(先比姓氏,再比名字):

rows = [Dict("fname" =>  "Brian", "lname" =>  "Jones", "uid" =>  1003),
    Dict("fname" =>  "David", "lname" =>  "Beazley", "uid" =>  1002),
    Dict("fname" =>  "John", "lname" =>  "Cleese", "uid" =>  1001),
    Dict("fname" =>  "Big", "lname" =>  "Jones", "uid" =>  1004)]

sorted_rows = sort(rows, by=x->(x["lname"], x["fname"]))

执行后结果会按lname升序,同姓氏的按fname升序排列:

4-element Vector{Dict{String, Any}}:
 Dict("fname" => "David", "lname" => "Beazley", "uid" => 1002)
 Dict("fname" => "John", "lname" => "Cleese", "uid" => 1001)
 Dict("fname" => "Big", "lname" => "Jones", "uid" => 1004)
 Dict("fname" => "Brian", "lname" => "Jones", "uid" => 1003)

方法2:用get函数避免键不存在报错

如果你的字典列表可能存在缺少lname或fname的情况,用get函数设置默认值,避免运行时错误:

sorted_rows = sort(rows, by=x->(get(x, "lname", ""), get(x, "fname", "")))

这里默认值用空字符串,你也可以根据需求换成其他值(比如missing)。

为什么原来的写法不行?

Julia官方把字典和NamedTuple的广播功能预留了,不允许通过getindex.(dict, keys)这种方式广播取值,必须手动构造元组或者用其他方式获取多键值。

内容的提问来源于stack exchange,提问作者Vinod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:08:21