使用' dict set'在Tcl中具有多个键和值的命令

时间:2014-07-26 06:20:37

标签: dictionary tcl

我正在尝试使用词典,我可以浏览dict set命令。使用此命令,我可以为现有密钥设置新值。

当我尝试为多个键设置值时,我得到"missing value to go with key"

我已经用两种方式尝试了这些命令,

#keys list and then values list
dict set userinfo name age VIGNESH 23
#key and value pair
dict set userinfo name VIGNESH age 23

我查看了dict set的手册页,找到了以下内容

dict set dictionaryVariable key ?key ...? value
    This operation takes the name of a variable containing a dictionary value and places an updated dictionary value in that variable containing a mapping from the given key to the given value. When multiple keys are present, this operation creates or updates a chain of nested dictionaries. 

这就是我正在尝试的

% set userinfo { name DINESH age 24 dob {16/05/1990} state Chennai }  
 name DINESH age 24 dob {16/05/1990} state Chennai 
% dict get $userinfo
name DINESH age 24 dob 16/05/1990 state Chennai
% dict set userinfo state Madurai
name DINESH age 24 dob 16/05/1990 state Madurai
% dict get $userinfo
name DINESH age 24 dob 16/05/1990 state Madurai
% dict set userinfo name age VIGNESH 23
missing value to go with key
% dict set userinfo name VIGNESH age 23
missing value to go with key
% 

2 个答案:

答案 0 :(得分:2)

当您使用多个键时,这意味着您正在尝试访问嵌套dicts的第二个,第三个等。考虑:

% set userinfo [dict create user {name DINESH surname A} age 24 dob 16/05/1990 state Chennai]
user {name DINESH surname A} age 24 dob 16/05/1990 state Chennai
% dict set userinfo user surname B
user {name DINESH surname B} age 24 dob 16/05/1990 state Chennai

如您所见,以上内容会将密钥surname的较高级别值中的密钥user的值更改为B

或者如果您愿意,首先检查user(给出一个字典)的值,然后(从该字典开始)surname并更改该值。

请注意,文档提到了嵌套字典和单个值。

答案 1 :(得分:1)

您也可以使用

dict with userinfo {
    set name VIGNESH
    set age 23
}

command-subcommand dict with将字典的值映射到以键命名的变量,并评估脚本体。如果该脚本更改了变量的值,则字典中的值也将更改。请注意,在评估脚本之后,变量将继续存在(但更改它们的值将不再对字典中的值产生任何影响),并且将覆盖具有相同名称的任何变量。

对于Jerry示例中的嵌套字典,您可以指定一串键来达到您想要的级别:

set userinfo [dict create user {name DINESH surname A} age 24 dob 16/05/1990 state Chennai]

dict with userinfo user {
    set name VIGNESH
    set surname B
}

文档:dictset