如何在 tcl 中使用 dict 附加嵌套 dict

Posted

技术标签:

【中文标题】如何在 tcl 中使用 dict 附加嵌套 dict【英文标题】:How to use dict append nested dict in tcl 【发布时间】:2016-06-13 18:43:25 【问题描述】:

我想在 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 ]"

有什么想法吗?

【问题讨论】:

【参考方案1】:

这是另一种方法:

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]

文档:append、dict、puts、set

【讨论】:

【参考方案2】:

您似乎没有正确创建字典:

% 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 dictionaryVariable key ?string ...?

这会将给定的字符串(或多个字符串)附加到给定键映射到给定变量中包含的字典值中的值,将结果字典值写回该变量。 [...]

要创建具有多个深度的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,它允许您修改任意深度的字典中的值,这是@987654327 的缺点@。现在dict get $k fee foo(与[dict get [dict get $k fee] foo] 的作用相同)将为您提供kak poached

但是,我可能会将字典创建为:

set k [dict create foo fee kak poached]

【讨论】:

以上是关于如何在 tcl 中使用 dict 附加嵌套 dict的主要内容,如果未能解决你的问题,请参考以下文章

第五天 字典的介绍,dict增删改查,嵌套 及for循环

Python:附加原始对象与附加对象副本[重复]

python第二十三课——dict中的函数

如何解析 json 值的动态变化。带有 2 个嵌套 dic 的字典,然后是数组,然后是 dic

python中的dict怎么用?

fromkeys:创建一个新的字典,使用可迭代的键和设置为value的值