代码之家  ›  专栏  ›  技术社区  ›  user8415577

返回kdb中的表列表

  •  0
  • user8415577  · 技术社区  · 6 年前

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

    有没有办法让它返回一个表列表或一些表字典,以便我可以将其导出到python,或者我应该尝试其他方法?任何关于这方面的线索都将不胜感激。谢谢

    1 回复  |  直到 6 年前
        1
  •  3
  •   Ryan McCarron    6 年前

    不清楚您在问什么-您是否有生成多个表的函数?您想返回这些表的列表吗?如果是这样的话

    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}
    

    要获得相同的输出,请在创建表时将每个表连接到列表,然后返回表列表。