从tcl dict获取嵌套键

从tcl dict获取嵌套键,tcl,Tcl,如果我在Tcl中有一个嵌套的dict,就像这样 dict set mydict1 A key1 value1 dict set mydict1 B key1 value1 dict set mydict1 B key2 value2 dict set mydict1 C key3 value3 我想确定这本词典中所有二级键的列表。在这种情况下,我想知道第二级键是key1、key2、key3 有没有一种方法可以直接从此字典中获取此值列表?没有内置的命令来执行此操作,甚至没有一种方法可以让代码代表

如果我在Tcl中有一个嵌套的dict,就像这样

dict set mydict1 A key1 value1
dict set mydict1 B key1 value1
dict set mydict1 B key2 value2
dict set mydict1 C key3 value3
我想确定这本词典中所有二级键的列表。在这种情况下,我想知道第二级键是key1、key2、key3


有没有一种方法可以直接从此字典中获取此值列表?

没有内置的命令来执行此操作,甚至没有一种方法可以让代码代表您知道这就是Tcl中类型系统的结构。然而,如果您知道肯定总是有两个级别,那么自己编写代码就不难了

proc two-level-enumerate {dict} {
    set keypairs {}
    dict for {key1 subdict} $dict {
        foreach key2 [dict keys $subdict] {
            lappend keypairs [list $key1 $key2]
            ### Depending on what you're doing, you might prefer:
            # lappend keypairs $key1 $key2
        }
    }
    return $keypairs
}
通用Tcl层的棘手之处在于知道有两个级别,因为它无法安全地在值上使用内部类型文字的类型非常棘手,而另一方面,确定预期结构与在其下放置的内容也很棘手。显式—上面的代码—工作得更好。

多亏了我能够进一步完善解决方案,使其符合以下要求:对于lmap,tcl>=8.6:

lsort -unique [concat {*}[lmap k1 [dict keys $mydict1] {dict keys [dict get $mydict1 $k1]}]]