我有一个包含字符串列表的变量。我想为列表中的每个字符串创建一个新的字典,然后使用该字符串值更新每个字典。这将导致创建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
答案 0 :(得分:2)
我认为您最可能感兴趣的是桌子。从一些与您拥有的数据类似的示例数据开始:
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
我们还可以使用内置的.j.j
函数将其序列化为JSON:
q).j.j t
"[{\"ticker\":\"AMZN\",\"datetime\":\"2016-09-16T16:06:23.573\"},{\"ticker\":..
或者如果我们希望每个字典作为单独的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\"}"
..