You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KDB+/Q技术问询:如何从分组列表创建映射字典实现数据分类

问题

现有Q表如下:

t:([] creature:`cat`dog`ant`bee`wasp`crocodile; cnt:til 6)

需要新增category列标注生物类型:cat/dog归为animal,ant/bee/wasp归为insect。

目前通过字典映射实现的写法不够简洁:

update category:creature ^ ((`cat`dog`ant`bee`wasp)!(`animal`animal`insect`insect`insect)) creature from t

希望能从分组列表((catdog;animal);(antbeewasp;insect))`直接生成映射字典,简化代码。

解决方案

生成映射字典

用raze+flip each处理分组列表,一键生成所需字典:

mapping: raze flip each ((`cat`dog;`animal);(`ant`bee`wasp;`insect))

执行后mapping的结果为:

cat dog ant bee wasp!animal animal insect insect insect

原理:

  • flip each遍历每个分组元组,将(生物列表;分类)转成多个(单个生物;分类)的键值对
  • raze把所有键值对扁平化,拼接成完整的映射字典

更新表的分类列

用生成好的字典更新表,写法更简洁:

update category:mapping[creature] from t

最终表结果:

creature   cnt category
------------------------
cat        0   animal
dog        1   animal
ant        2   insect
bee        3   insect
wasp       4   insect
crocodile  5

如果需要给未匹配的生物设置默认分类,可使用^操作符,例如:

update category:`unknown^mapping[creature] from t

此时crocodile的category会被设为unknown。

内容的提问来源于stack exchange,提问作者wibotwi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:55:59