Bonjour
Je viens de remarquer que dans un dictionnaire en compréhension, on ne peut pas utiliser une variable définie dans un sous-dictionnaire dans le dictionnaire "parent".
Exemple: je crée un dictionnaire où chaque clé sera associée à un tuple de sa valeur
Jusque là, pas de problème.
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dd={k : tuple(range(k+1)) for k in range(1, 6)} print(dd) # {1: (0, 1), 2: (0, 1, 2), 3: (0, 1, 2, 3), 4: (0, 1, 2, 3, 4), 5: (0, 1, 2, 3, 4, 5)}
Mais si je cherche à déplacer chaque tuple dans un sous-dictionnaire...
...là où je m'attendais à avoir {1: {"data" : (0, 1)}, 2: {"data" : (0, 1, 2)}, 3: {"data" : (0, 1, 2, 3)}, 4: {"data" : (0, 1, 2, 3, 4)}, 5: {"data" : (0, 1, 2, 3, 4, 5)}} j'ai eu un NameError: name 'k' is not defined.
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dd={k : {"data" : tuple(range(k+1)) for k in range(1, 6)}} print(dd)
Effectivement avec le recul c'est compréhensible. Le sous-dictionnaire étant probablement généré à part, la variable "k" ne remonte pas sur le parent. Mais sur le coup j'ai été un peu surpris.
PS : en fait, même pas besoin de sous-dictionnaire. Une simple superposition de cast suffit à reproduire le souci.
Si quelqu'un a un avis...
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 d1={k : tuple(range(k+1)) for k in range(1, 6)} # ok d2={k : tuple(tuple(range(k+1)) for k in range(1, 6))} # Erreur
Partager