kdb q - 在嵌套列表中查找

kdb q - lookup in nested list

如果原子在值列表中,是否有一种通过原子值查找字典键的巧妙方法?

假设:字典的值列表每个都有唯一的元素

示例:

d:`tech`fin!(`aapl`msft;`gs`jpm) / would like to get key `fin by looking up `jpm
d?`gs`jpm / returns `fin as expected
d?`jpm    / this doesn't work unfortunately
$[`jpm in d`fin;`fin;`tech] / this is the only way I can come up with

最后一个选项不能很好地适应键的数量

谢谢!

我认为您可以利用 valuekey 关键字来查找您要查找的内容:

q)key[d]where any value[d]in `jpm
,`fin

希望对您有所帮助!

杰玛

您可以利用 where 如何处理字典,并使用 in :

where `jpm in/:d
,`fin

请注意,这将 return 一个列表,因此如果您想复制上面的内容,您可能需要对输出执行 first

你为什么要难为自己呢?使用 table!

q)t:([] c:`tech`tech`fin`fin; sym:`aapl`msfw`gs`jpm)
q)first exec c from t where sym=`jpm

可以当然可以按照你的要求去做:

first where `jpm in'd

但这并不能很好地扩展到向量,而 table 方法可以!

q)exec c from t where sym in `jpm`gs

目前您收到的答复非常好。这是我根据 Ryan 的回答所做的贡献:

{[val;dict]raze {where y in/:x}[dict]'[val]}[`msft`jpm`gs;d]

主要区别在于您可以传递要评估的值列表,结果将是键列表。

[`msft`jpm`gs;d]

输出:

`tech`fin`fin