如果原子在值列表中,是否有一种用原子值查找字典键的简洁方法?
假设:字典的值列表具有每个唯一元素
示例:
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
最后一个选项无法很好地扩展键数
谢谢!
答案 0 :(得分:9)
您可以利用where
对词典的操作方式,并使用in
:
where `jpm in/:d
,`fin
请注意,这将返回一个列表,因此如果您想要复制上面的内容,可能需要在输出上执行first
。
答案 1 :(得分:4)
为什么你自己这么难?使用表格!
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
但是这种方法并没有很好地扩展到向量,而表格方法确实如此!
q)exec c from t where sym in `jpm`gs
答案 2 :(得分:2)
我认为你可以利用value
& key
个关键字可以找到您所追求的内容:
q)key[d]where any value[d]in `jpm
,`fin
希望有所帮助!
杰马
答案 3 :(得分:1)
到目前为止,您收到的答案非常好。这是我对Ryan答案的贡献:
{[val;dict]raze {where y in/:x}[dict]'[val]}[`msft`jpm`gs;d]
主要区别在于您可以传递要评估的值列表,结果将是键列表。
[`msft`jpm`gs;d]
输出:
`tech`fin`fin