2017-07-30 2 views
0

Si j'ai un dict imbriqué dans Tcl comme siobtenir les clés imbriquées de 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 

Je voudrais identifier la liste de toutes les clés du deuxième niveau dans ce dictionnaire. Dans ce cas, je voudrais savoir que les clés de deuxième niveau sont key1, key2, key3

Existe-t-il un moyen d'obtenir directement cette liste de valeurs de ce dictionnaire?

Répondre

1

Il n'y a pas de commande intégrée pour ce faire, ni même un moyen pour le code de savoir en votre nom que c'est ce que la structure est (ce qui est une conséquence du système de type dans Tcl). Cependant, si vous savez qu'il y a toujours deux niveaux, il n'est pas trop difficile de le coder vous-même.

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 
} 

Le peu délicat pour la couche Tcl générique est de savoir qu'il ya deux niveaux, car il ne peut pas utiliser en toute sûreté les types internes sur des valeurs (les types de littéraux sont assez délicat, et sur le côté, la détermination la structure prévue par rapport à ce que vous avez mis en dessous est également gênante). Être explicite - le code ci-dessus - fonctionne beaucoup mieux.