Dictionary 如何在tcl中使用dict-append嵌套dict

Dictionary 如何在tcl中使用dict-append嵌套dict,dictionary,nested,append,tcl,Dictionary,Nested,Append,Tcl,我想在Tcl中有一个嵌套字典,并附加一个值。 但是筑巢并没有真正起作用。。。 见代码: > set k [dict create] > dict append k fee foo " kak" > dict append k fee foo " poached" > puts [dict get [dict get $k fee] foo ]<code> 结果是: missing value to go with key while executi

我想在Tcl中有一个嵌套字典,并附加一个值。 但是筑巢并没有真正起作用。。。 见代码:

> set k [dict create]
> dict append k fee foo " kak"
> dict append k fee foo " poached"
> puts [dict get  [dict get $k fee] foo ]<code>
结果是:

missing value to go with key
    while executing
"dict get  [dict get $k fee] foo "
    invoked from within
"puts [dict get  [dict get $k fee] foo ]"

有什么想法吗?

您似乎没有正确创建dict:

% set k [dict create]
% dict append k fee {foo " kak"}
fee {foo " kak"}
% dict append k fee {foo " poached"}
fee {foo " kak"foo " poached"}
在这里你可以看到这可能不是你想要的。如果您允许我引用部分文件:

dict append字典可变键?字符串

这会将给定字符串追加到给定变量中包含的字典值中给定键映射到的值,并将结果字典值写回该变量。[……]

要创建具有多个深度的
dict
,如果我必须尽可能地遵循您的方法,我会使用类似的方法:

% set k [dict create]
% dict append k fee {foo kak}
fee {foo kak}
% dict set k fee foo "[dict get $k fee foo] poached"
fee {foo {kak poached}}
如果要将
poached
附加到字符串
kak
的值,则需要使用
dict set
,它允许您修改任何深度的dict中的值,这是
dict append
的一个缺点。现在,
dict get$k-fee-foo
(与
[dict get[dict get$k-fee]foo]的作用相同)
)将为您提供
kak-poached

不过,我可能会将字典创建为:

set k [dict create foo {fee {kak poached}}]

这是另一种方法:

set k [dict create fee {foo {}}]
dict with k fee {append foo " kak"}
dict with k fee {append foo " poached"}
puts [dict get $k fee foo]
使用
dict with
命令,您可以为字典的成员使用变量别名(只要它们已经存在,就可以在第一行进行初始化)。可以在脚本之前提供一个或多个键,以查找希望更改发生的字典级别。更改变量
foo
的值现在将更改
k
中键
fee foo
的值

当然,你也可以这样做:

set k [dict create fee {foo {}}]
dict with k fee {
    append foo " kak"
    append foo " poached"
}
puts [dict get $k fee foo]
文件: