在 kdb 中转换字典
casting dictionary in kdb
我想转换字典并记录它。
dict:(enlist`code)!(enlist`B10005)
当我做的时候
type value dict / 11h
但密钥看起来像代码
当我做的时候
type string value dict / 0h
我不知道为什么。
我想连接字符串并记录它。所以它会是这样的:
"The constraint is ",string key dict
但是没有用。约束将类似于每一行的每个字母。我如何转换字典以便连接并记录它。
查看 http://code.kx.com/q/ref/dotq/#qs-plain-text 以记录任意 kdb+ 数据类型。
q)show dict:`key1`key2!`value1`value2
key1| value1
key2| value2
q).Q.s dict
"key1| value1\nkey2| value2\n"
这里发生了几件事。
dict
只有一对 key/value 但这个事实不会影响 key
和 value
的行为:它们 return 所有 个键和值。这就是为什么 type value dict
是 11h
,它是 个符号的列表。出于完全相同的原因,key dict
是 ,`code
,其中逗号表示 enlist
:key dict
是 符号列表 ,其中 (在您的特定示例中) 恰好只有一个符号 `code
.
应用于符号列表的 string
将该列表的每个元素转换为字符串,并且 returns 的列表字符串
q 中的字符串是一个简单的字符列表(有关简单列表和混合列表的更多信息,请参阅 http://code.kx.com/wiki/Tutorials/Lists)
当您将一个简单的字符列表 "The constraint is "
与一个字符串列表连接时,即一个字符列表的列表,结果不能再表示为一个简单的列表,而是一个通用的列表。这就是为什么 q 在加入之前将 "The constraint is "
(简单列表)转换为 ("T";"h";"e",...) (通用列表)并且你 q 开始显示每个单独一行的字符。
我希望你现在明白发生了什么。根据您的需要,您可以像这样修复代码:
"The constraint is ",first string key dict / displays the first key
"The constraint is ",", "sv string key dict / displays all keys separated by commas
希望这对您有所帮助。
如果您正在寻找不错的日志记录,像这样的东西应该可以帮助您(并且是通用的)
遍历值,并转换为字符串
s:{$[all 10h=type each x;","sv x;0h~t:type x;.z.s each x;10h~t;x;"," sv $[t<0;enlist@;(::)]string x]}/
字符串操作
fs:{((,)string[count x]," keys were passed")," " sv/:("Key:";"and the values for it were:"),'/:flip (string key@;value)@\:s each x}
例子
d:((,)`a)!(,)`a
d2:`a`b!("he";"lo")
d3:`a`b!((10 20);("he";"sss";"ssss"))
结果与执行
fs each (d;d2;d3)
您可以明显地根据您的确切需求进行定制 - 这没有针对复杂的字典值进行测试
我想转换字典并记录它。
dict:(enlist`code)!(enlist`B10005)
当我做的时候
type value dict / 11h
但密钥看起来像代码
当我做的时候
type string value dict / 0h
我不知道为什么。
我想连接字符串并记录它。所以它会是这样的:
"The constraint is ",string key dict
但是没有用。约束将类似于每一行的每个字母。我如何转换字典以便连接并记录它。
查看 http://code.kx.com/q/ref/dotq/#qs-plain-text 以记录任意 kdb+ 数据类型。
q)show dict:`key1`key2!`value1`value2
key1| value1
key2| value2
q).Q.s dict
"key1| value1\nkey2| value2\n"
这里发生了几件事。
dict
只有一对 key/value 但这个事实不会影响key
和value
的行为:它们 return 所有 个键和值。这就是为什么type value dict
是11h
,它是 个符号的列表。出于完全相同的原因,key dict
是,`code
,其中逗号表示enlist
:key dict
是 符号列表 ,其中 (在您的特定示例中) 恰好只有一个符号`code
.
应用于符号列表的 string
将该列表的每个元素转换为字符串,并且 returns 的列表字符串q 中的字符串是一个简单的字符列表(有关简单列表和混合列表的更多信息,请参阅 http://code.kx.com/wiki/Tutorials/Lists)
当您将一个简单的字符列表
"The constraint is "
与一个字符串列表连接时,即一个字符列表的列表,结果不能再表示为一个简单的列表,而是一个通用的列表。这就是为什么 q 在加入之前将"The constraint is "
(简单列表)转换为 ("T";"h";"e",...) (通用列表)并且你 q 开始显示每个单独一行的字符。
我希望你现在明白发生了什么。根据您的需要,您可以像这样修复代码:
"The constraint is ",first string key dict / displays the first key
"The constraint is ",", "sv string key dict / displays all keys separated by commas
希望这对您有所帮助。
如果您正在寻找不错的日志记录,像这样的东西应该可以帮助您(并且是通用的) 遍历值,并转换为字符串
s:{$[all 10h=type each x;","sv x;0h~t:type x;.z.s each x;10h~t;x;"," sv $[t<0;enlist@;(::)]string x]}/
字符串操作
fs:{((,)string[count x]," keys were passed")," " sv/:("Key:";"and the values for it were:"),'/:flip (string key@;value)@\:s each x}
例子
d:((,)`a)!(,)`a
d2:`a`b!("he";"lo")
d3:`a`b!((10 20);("he";"sss";"ssss"))
结果与执行
fs each (d;d2;d3)
您可以明显地根据您的确切需求进行定制 - 这没有针对复杂的字典值进行测试