2013-10-09 133 views
4

我似乎在名为chicken的列表中有Jim和Bob的问题。我知道这是可能的,在另一个具有值列表的字典中有一个字典。我究竟做错了什么?Tcl:字典里面的字典

puts [dict set farm tools hoe] 
puts [dict lappend farm tools pitchfork] 
puts [dict set farm animal cow Marry] 
puts [dict set farm animal chicken Jim] 
puts [dict lappend farm animal chicken Bob] 
puts "chicken list: [dict get $farm animal chicken]" 
puts "tool list: [dict get $farm tools]" 

输出

tools hoe 
tools {hoe pitchfork} 
tools {hoe pitchfork} animal {cow Marry} 
tools {hoe pitchfork} animal {cow Marry chicken Jim} 
tools {hoe pitchfork} animal {cow Marry chicken Jim chicken Bob} 
chicken list: Bob 
tool list: hoe pitchfork 

正如你所看到的工具清单的工作。但鸡列表不起作用。我构建代码的方式有问题吗?我使用字典lappend或字典错误?任何事情都有助于说明这一点,谢谢。

+5

至于是谁设计'字典lappend'的人,这是正确的解决方案。没有“语法空间”来嵌套键处理,同时允许将多个值附加到目标子列表。那么,除非键的空间被不同的丑陋方式所限制。这都是设计的妥协。 '带'的字典和'字典更新'是解决这个问题的方法。 –

回答

1

所以我去TCL聊天室,他们告诉我:

正如在手册页,字典lappends双方鸡肉和鲍伯在字典元素动物列表中所描述。

您不能直接附加到字典中更深的列表。

一种方法是:

dict with farm { 
    dict lappend animal chicken Jim Bob 
} 

所以你,是我不好。 :P的所有功劳都会在tcl聊天室里传递给“schelte”。

附加:为什么字典lappend工作方式是这样的原因来形成多纳尔研究员自己在上面的评论,谢谢多纳尔