返回kdb中的表列表

时间:2018-01-17 12:58:04

标签: kdb q-lang

kdb中有一个函数生成多个表作为结果。我的主要目的是分析使用python生成的每个表。

有没有办法可以让它返回一个表的列表或一些表的字典,这样我可以将它导出到python或者我应该尝试别的吗?任何领导对此表示赞赏。谢谢

1 个答案:

答案 0 :(得分:3)

你不清楚你在问什么 - 你有一个产生多个表的功能吗?你想要返回这些表的列表吗?如果是这种情况,你有类似

的东西
f:{t:([]a:x?`1;b:x?10);q:([]c:x?`2;d:x?10f)}

你要修改以返回t和q,你可以从函数中手动构建一个列表:

q)f:{t:([]a:x?`1;b:x?10);q:([]c:x?`2;d:x?10f);(t;q)}
q)f 3
+`a`b!(`o`p`l;5 8 5)
+`c`d!(`ig`nf`no;9.149882 9.030751 7.750292)

或者,您可以在每个表上使用enlist返回表格并加入这些操作的结果:

q)f:{t:([]a:x?`1;b:x?10);q:([]c:x?`2;d:x?10f);enlist[t],enlist[q]}
q)f 3
+`a`b!(`n`a`a;6 9 0)
+`c`d!(`nn`mi`om;9.216436 1.809536 6.434637)

或者,如果您使用each将多个输入传递给返回单个表的函数,结果自然会是一个表列表:

q)f:{t:([]a:x?`1;b:x?10)}
q)f each 3 3
+`a`b!(`l`o`d;9 5 2)
+`a`b!(`h`m`g;9 5 9)

您可以做的另一个修改是将每个表连接到创建的表列表中:

q)f:{tl:();
     t:([]a:x?`1;b:x?10);
     tl,:enlist t;
     q:([]c:x?`2;d:x?10f);
     tl,:enlist q;
     tl}
q)f 3
+`a`b!(`a`l`i;1 9 1)
+`c`d!(`db`mi`la;2.371288 5.67081 4.269177)

这对于分配表格非常冗长,但您不需要直接执行此操作,您也可以这样做:

 q)f:{tl:();
      tl,:enlist ([]a:x?`1;b:x?10);
      tl,:enlist ([]c:x?`2;d:x?10f);
      tl}

要获得相同的输出,请将每个表连接到列表中,然后返回表格列表。