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

KDB中如何用uj合并任意长度字典?匹配键取值并集

合并字典列表:匹配键取并集,新键直接插入

uj函数无法实现这个需求,因为uj(更新连接)的逻辑是用后续字典的键值对覆盖前面的,所以(uj)/:会直接返回最后一个字典,和你遇到的情况一致。

要实现目标效果,可按以下思路编写代码:

dd1:(`a`b`c)!(1 2; 3 4; 5 6);
dd2:(`b`c`d)!(7 8; 9 10; 0 1);
dd3:(`a`f`e)!(3 4; 1 1; 2 2);

// 合并逻辑
dicts: (dd1; dd2; dd3);
allKeys: distinct raze keys each dicts;
mergedVals: {raze x} each {[k] v where not null v: get[k] each dicts} each allKeys;
result: allKeys!mergedVals;

执行后result即为期望结果:

(`a`b`c`d`e`f)!(1 2 3 4; 3 4 7 8; 5 6 9 10; 0 1; 2 2; 1 1)

关键步骤拆解:

  • allKeys: distinct raze keys each dicts:将所有字典的键展开后去重,得到最终字典的完整键集合
  • {[k] v where not null v: get[k] each dicts} each allKeys:针对每个键,遍历所有字典提取对应值,过滤掉不存在该键时产生的null值
  • {raze x} each ...:把每个键对应的多个值列表合并成单个列表

也可以用更简洁的写法:

result: {[ks] ks!{raze x} each {get[;x]}[dicts] each ks} distinct raze keys each dicts

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:40:58