KDB+如何更新嵌套字典:修改内部键值对触发assign错误如何解决
解决kdb+嵌套字典赋值
'assign错误的方法 错误原因
kdb+不支持链式索引赋值,也就是books[firstKey][secondKey]:value的写法是非法的:第一层索引返回的是内层子字典的临时副本,无法对临时副本执行赋值操作,因此抛出'assign错误。
正确写法
方法1:合并多维度索引(最常用)
把所有层级的索引放在同一对方括号中,不同层级的索引用分号分隔:
books[`$"ETH-USD-BIDS"; 3518.12]:4f
赋值完成后就可以正常查询到更新后的值:
q)books[`$"ETH-USD-BIDS"][3518.12] 4f
方法2:使用@ amend算子
如果需要在函数中动态处理嵌套赋值,可以用@ amend算子实现:
@[books; `$"ETH-USD-BIDS"; @[; 3518.12; :; 4f]]
补充说明
如果目标价格档位在内层字典中不存在,上述写法会自动新增对应的键值对,无需额外操作即可完成订单簿档位的新增。
内容的提问来源于stack exchange,提问作者New Ancient
相关产品推荐
相关产品推荐

