如何从键控表(keyed table)生成嵌套字典(nested dict)?
将kdb+键控表转换为嵌套字典
实现思路
要把键控表转成支持可变键数的嵌套字典,核心是从右往左逐层嵌套键列与对应的值:先把最右侧的键列和值列生成基础字典,再依次将左侧的键列与上一层的字典嵌套,最终形成多层级的嵌套结构。
代码实现
首先构造示例键控表:
t:([k1:20?`a`b`c;k2:20?`x`y`z;k3:20?1000];v:20?`A`B`C)
编写通用转换函数,支持任意数量的键列:
tableToNestedDict:{[t] keysTab: first t; // 提取键控表的键部分 valCol: last t; // 提取值列 // 从右往左逐层嵌套,构建多级字典 foldr[{[kCol;d] flip (kCol;d)}] valCol flip keysTab }
测试使用
生成嵌套字典后,即可通过键组合直接取值:
d:tableToNestedDict[t] d[`c;`y;886] // 返回对应的值(如示例中的`A`)
关键逻辑说明
flip keysTab将键表转置,让每一行的键组合(如(c;y;886))与对应值配对;foldr是kdb+的右折叠函数,从最右侧的键开始,逐层将键列与下一层的字典绑定,最终形成嵌套结构;- 若键控表存在重复键组合,转换后的字典会保留最后一次出现的键值对,与kdb+键控表的行为一致。
内容的提问来源于stack exchange,提问作者chrise
相关产品推荐
相关产品推荐

