Kdb 如何从字符串列表创建多个词典?

Kdb 如何从字符串列表创建多个词典?,kdb,Kdb,我有一个包含字符串列表的变量。对于列表中的每个字符串,我想创建一个新字典,然后用该字符串值更新每个字典。这将导致创建100个新词典。例如,我的变量与此类似 q)stock "APPL" "TSLA" "AMZN" "MSFT" "NVDA" .. q)count stock 100 我知道如何对变量中的单个字符串执行此操作 q)newdict:()!() q)stock:"AAPL" q)newdict[`ticker]:stock q)newdict ticker|"AAPL" 但是对于一

我有一个包含字符串列表的变量。对于列表中的每个字符串,我想创建一个新字典,然后用该字符串值更新每个字典。这将导致创建100个新词典。例如,我的变量与此类似

q)stock
"APPL"
"TSLA"
"AMZN"
"MSFT"
"NVDA"
..
q)count stock
100
我知道如何对变量中的单个字符串执行此操作

q)newdict:()!()
q)stock:"AAPL"
q)newdict[`ticker]:stock
q)newdict
ticker|"AAPL"
但是对于一个由100个字符串组成的变量,我该怎么做呢?另外,如果我想更新字典以包含来自另一个具有相同计数(如下所示)的变量的额外
key:value
对,那么此操作使用的正确语法是什么

q)date
2019.05.23T13:03:55.271474000 2019.05.23T13:03:55.271474000...
q)count date
100
变量中每个字符串的预期输出将创建一个类似于以下内容的新字典

q)newdictAPPL
ticker|"APPL"
datetime|2019.05.23T13:03:55.271474000

q)newdictTSLA
ticker|"TSLA"
datetime|2019.05.23T13:05:33.727845200

q)newdictAMZN
ticker|"AMZN"
datetime|2019.05.23T13:08:27.742968000

我想你最感兴趣的是一张桌子。从一些与您拥有的类似的示例数据开始:

q)stock:20?("AAPL";"TSLA";"MSFT";"AMZN")
q)date:20?.z.Z
q)0N!stock;
("AMZN";"MSFT";"AMZN";"MSFT";"AAPL";"TSLA";"TSLA";"MSFT";"TSLA";"AAPL";"TSLA"..
q)date
2016.09.16T16:06:23.573 2010.10.04T23:28:53.863 2001.03.12T15:16:04.379 2005...
我们可以在kdb中非常简单地构造表:

q)t:([]ticker:stock;datetime:date)
q)t
ticker datetime               
------------------------------
"AMZN" 2016.09.16T16:06:23.573
"MSFT" 2010.10.04T23:28:53.863
"AMZN" 2001.03.12T15:16:04.379
"MSFT" 2005.07.17T04:02:58.577
"AAPL" 2012.12.17T10:48:15.839
"TSLA" 2017.09.16T11:06:02.579
"TSLA" 2002.11.18T00:03:57.945
"MSFT" 2009.06.02T08:28:32.680
"TSLA" 2013.10.24T06:50:31.420
"AAPL" 2007.06.12T07:04:33.058
"TSLA" 2006.08.10T03:45:58.748
"AAPL" 2001.01.17T11:04:57.387
"AAPL" 2010.08.29T21:47:39.564
"MSFT" 2003.10.19T01:58:58.820
"AMZN" 2010.11.21T00:05:03.256
"MSFT" 2001.05.13T21:03:21.293
"TSLA" 2004.02.13T07:49:57.013
"AAPL" 2015.01.31T08:13:03.986
"MSFT" 2009.05.24T06:34:05.044
"TSLA" 2013.03.28T22:11:03.641
我们可以看到kdb中的一个表是一个字典列表,我们可以索引并获取单个字典:

q)t[0]
ticker  | "AMZN"
datetime| 2016.09.16T16:06:23.573
q)t[1]
ticker  | "MSFT"
datetime| 2010.10.04T23:28:53.863
我们还可以使用内置函数序列化为JSON:

q).j.j t
"[{\"ticker\":\"AMZN\",\"datetime\":\"2016-09-16T16:06:23.573\"},{\"ticker\":..
或者,如果我们希望每个dict作为单独的JSON字符串:

q).j.j each t
"{\"ticker\":\"AMZN\",\"datetime\":\"2016-09-16T16:06:23.573\"}"
"{\"ticker\":\"MSFT\",\"datetime\":\"2010-10-04T23:28:53.863\"}"
"{\"ticker\":\"AMZN\",\"datetime\":\"2001-03-12T15:16:04.379\"}"
"{\"ticker\":\"MSFT\",\"datetime\":\"2005-07-17T04:02:58.577\"}"
"{\"ticker\":\"AAPL\",\"datetime\":\"2012-12-17T10:48:15.839\"}"
"{\"ticker\":\"TSLA\",\"datetime\":\"2017-09-16T11:06:02.579\"}"
"{\"ticker\":\"TSLA\",\"datetime\":\"2002-11-18T00:03:57.945\"}"
..

你能再解释一下你的预期产出吗?您想要一个表(在kdb中它只是一个字典列表)吗?另外,您的
stock
变量包含100个字符串,而不是100个字符(字符串是字符列表),谢谢,Jonathan。将字符更新为字符串,并包含预期结果的示例。一个表也可以很好地工作,只要我可以从该表创建单独的字典,并将每个字典序列化回一个json对象。谢谢,Jonathon。这就是我要找的!我会给你一票,因为我缺乏“声誉”,这是不允许的。