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

时间:2019-05-23 17:09:03

标签: 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个字符串的列表的变量,我该怎么做呢?另外,如果我想更新字典以包含来自另一个具有相同计数(如下所示)的变量的其他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

1 个答案:

答案 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\"}"
..