【问题标题】:How to use dict append nested dict in tcl如何在 tcl 中使用 dict 附加嵌套 dict
【发布时间】: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 ]"

有什么想法吗?

【问题讨论】:

    标签: dictionary nested append tcl


    【解决方案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]
    

    文档:appenddictputsset

    【讨论】:

      【解决方案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}}]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-02
        • 2017-03-01
        • 2014-09-21
        • 1970-01-01
        • 1970-01-01
        • 2017-12-27
        • 1970-01-01
        相关资源
        最近更新 更多