2017-05-09 78 views
1

我在Tcl中有一個傳入列表,它實際上是鍵控列表的值。將列表分配給Tcl中的鍵控字典

像這樣的事情

set list1 [list value1 value2 value3 value4 value5 value6 value7 value8 value9] 
set keys [list key1 key2 key3] 

我想列表1分配到由鍵列表中的Tcl密鑰的密鑰陣列。

這是這樣做的最好方法嗎?還是有更優雅的方法?

foreach {a b c} $list1 { 
     dict lappend mydict key1 $a 
     dict lappend mydict key2 $b 
     dict lappend mydict key3 $c 
} 

回答

2

好了,我會更傾向於做:

foreach {a b c} $list1 { 
    foreach k $keys v [list $a $b $c] { 
     dict lappend mydict $k $v 
    } 
} 

要麼,或使用一個簡單的雙foreach來擴大縮小鍵進入列表的長度名單之前:

foreach k [lrepeat [expr {[llength $list1]/[llength $keys]}] {*}$keys] v $list1 { 
    dict lappend mydict $k $v 
} 

我不完全確定這些是否比你已經做的更優雅(或強大)。

+0

謝謝。你確定這不是你的第二個代碼片段中的拼寫錯誤嗎?在lrepeat命令中不應該是$ keys而不是$ list1? – Jonjilla

+0

@Jonjilla Err,是的。固定。 (在離開工作之前沒有時間運行代碼,所以一個bug悄悄進入...) –