在 KDB 中添加 2 个字典时出现类型错误



我能够添加第二个字典并将其分配给带有(d t)的字典(s i)

d1:`d`t!(.z.d ;.z.t)
d1,:`s`i!`VOD`L
d1

但是,反之则不起作用,我收到类型错误:

d2:`s`i!`VOD`L
d2,:`d`t!(.z.d ;.z.t)
d2

字典d2创建时,所有值都包含符号。当您尝试使用非符号类型的d2,:更新此内容时,会导致 kdb 由于类型不匹配而引发错误。防止这种情况的一种方法是在字典中添加一个 null 键,以确保您的值可以混合类型:

q)d2:enlist[`]!enlist(::)    / add null key
q)d2,:`s`i!`VOD`L
q)d2
 | ::
s| `VOD
i| `L
q)d2,:`d`t!(.z.d ;.z.t)
q)d2
 | ::
s| `VOD
i| `L
d| 2018.03.25
t| 09:42:52.754

如果调查命名空间(例如.q或创建自己的命名空间(,您将看到 null 键存在,从而确保命名空间可以包含混合类型。

在第一种情况下,(d t)正在制作一个异构字典:

q)d1:`d`t!(.z.d ;.z.t)
q)type value d1
0h

现在,如果您添加并分配任何同构或异构字典,它将起作用。

而在另一种情况下,创建的第一个字典是同构的,当您添加和分配异构字典(或其他类型的同构字典(时会抛出错误

q)d2:`s`i!`VOD`L
q)type value d2
11h
q)type value `d`t!(.z.d ;.z.t)

要解决此问题,您应该只添加字典,然后分配它。

q)d2:`s`i!`VOD`L
q)d2:d2, `d`t!(.z.d ;.z.t)
q)d2
s| `VOD
i| `L
d| 2018.03.25
t| 09:59:17.109

相关内容

最新更新