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
最后一个选项不能很好地适应键的数量
谢谢!
我认为您可以利用 value
和 key
关键字来查找您要查找的内容:
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
如果原子在值列表中,是否有一种通过原子值查找字典键的巧妙方法?
假设:字典的值列表每个都有唯一的元素
示例:
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
最后一个选项不能很好地适应键的数量
谢谢!
我认为您可以利用 value
和 key
关键字来查找您要查找的内容:
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