在 KDB 中添加 2 个字典时出现类型错误
Getting type error while adding 2 dictionaries in KDB
我可以添加第二本字典 (s i)
并将其分配给 (d t)
的字典
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
在第一种情况下,(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
创建字典 d2
时,所有符号所在的值。当您尝试使用 d2,:
和 non-symbol 类型来更新它时,它会导致 kdb 由于类型不匹配而抛出错误。防止这种情况的一种方法是在字典中添加一个空键,以确保您的值可以具有混合类型:
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 键存在,确保命名空间可以包含混合类型。
我可以添加第二本字典 (s i)
并将其分配给 (d t)
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
在第一种情况下,(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
创建字典 d2
时,所有符号所在的值。当您尝试使用 d2,:
和 non-symbol 类型来更新它时,它会导致 kdb 由于类型不匹配而抛出错误。防止这种情况的一种方法是在字典中添加一个空键,以确保您的值可以具有混合类型:
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 键存在,确保命名空间可以包含混合类型。