kdb/q中如何保存字典?求字典转表方法
KDB/Q 99h类型字典的保存与转表方案
直接保存字典的方法
二进制序列化保存(kdb/q专属格式,读写高效)
用set命令直接保存为二进制文件,后续可通过get读取:
`:out.bin set output // 读取时用:get `:out.bin
保存为可读文本(如CSV格式)
set不支持直接生成CSV,需先将字典转换为键值对结构,再用0:写入:
// 将字典转为键值对表后写入CSV 0:`:out.csv ("S";",") 0!flip (key output; value output)
解释:flip (key output; value output)把字典转为包含key和value两列的表,0!将表转为列表格式适配0:写入,("S";",")指定存储格式为字符串、分隔符为逗号。
字典转表方案
根据字典值的长度情况,分两种转表方式:
场景1:所有值长度一致(转标准宽表)
直接用flip命令转换,转换后可直接用save保存为CSV:
t:flip output save `:output.csv // 转表后即可使用save命令
示例:若字典为output:abc!10 20 30,flip后得到表a b c`,每行对应一组值(此处为单行)。
场景2:值长度不一致(转键值对长表)
如果字典的值是长度不同的列表,比如output:xy!1 2 3;4 5,可转成键值对结构的表:
// 保留原始值的列表形式 t:([] key:key output; value:value output) // 或展开为单行单值的键值对表 t:raze {[k;v] ([] key:enlist[k]#count v; value:v)} each output
转换后的表同样支持save :output.csv`命令保存。
注::out.csv set output报错的原因是set默认用于kdb二进制对象的存储,无法直接生成CSV格式文件,需先转换结构再保存。
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

