[Python]
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai un souci avec la méthode append().
Voici mon code :
print self.list_num_line_sharp[f], self.mat
self.mat2[self.list_num_line_sharp[f]].append(self.mat)
print self.mat2
Ces lignes sont imbriquées dans une boucle et voici ce qu'affiche le terminal :
20 {'vb': ['0.7'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}
{20: [{'vb': ['0.7'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}]}
130 {'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}
{130: [{'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}],
20: [{'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}]}
Je voudrais savoir pourquoi il me remplace la ligne commençant par '20:' par les valeurs de la ligne '30:'.
Moi je veux qu'à chaque fois il ajoute la ligne 'self.mat' et qu'il y associe la valeur 'self.list_num_line_sharp[f]'.
Où est mon erreur?
Merci
J'ai un souci avec la méthode append().
Voici mon code :
print self.list_num_line_sharp[f], self.mat
self.mat2[self.list_num_line_sharp[f]].append(self.mat)
print self.mat2
Ces lignes sont imbriquées dans une boucle et voici ce qu'affiche le terminal :
20 {'vb': ['0.7'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}
{20: [{'vb': ['0.7'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}]}
130 {'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}
{130: [{'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}],
20: [{'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}]}
Je voudrais savoir pourquoi il me remplace la ligne commençant par '20:' par les valeurs de la ligne '30:'.
Moi je veux qu'à chaque fois il ajoute la ligne 'self.mat' et qu'il y associe la valeur 'self.list_num_line_sharp[f]'.
Où est mon erreur?
Merci
7 réponses
-
Pour ajouter une valeur à un dictionnaire, il ne faut pas utiliser append.
Il ne faut pas faire:
mondico[cle].append(valeur)
mais:
mondico[cle] = valeur
La clé sera automatiquement créée dans le dictionnaire. -
J'ai bien essayé mais ça ne change rien.
J'ai les mêmes valeurs pour toutes les lignes.
Je ne comprends pas.... -
Je procède comme ça:
mat2 = {} cle = 20; mat = {'vb': ['0.7'], 'vc': ['1'], 'vs': ['0'], 've': ['0']} print cle, mat mat2[cle] = mat print mat2 print '-----' cle = 130; mat = {'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']} print cle, mat mat2[cle] = mat print mat2
Ce qui donne:20 {'vb': ['0.7'], 'vc': ['1'], 'vs': ['0'], 've': ['0']} {20: {'vb': ['0.7'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}} ----- 130 {'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']} {130: {'vb': ['0.75'], 'vc': ['1'], 'vs': ['0'], 've': ['0']}, 20: {'vb': ['0.7' ], 'vc': ['1'], 'vs': ['0'], 've': ['0']}} -
Tu as bien dégagé les .append() ?
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
J'y comprends rien.
J'ai viré les append(), mais ça ne marche pas.
Le fait que le dictionnaire "mat" soit créé dans une boucle ne pose pas de problème? -
Le fait que le dictionnaire "mat" soit créé dans une boucle ne pose pas de problème?
A priori non, mais en fait, quand tu ajoute self.mat, tu ajoute la référence à self.mat à ton dictionnaire.
Tu dois ajouter une copie:
self.mat2[self.list_num_line_sharp[f]] = self.mat.copy() -
Comment on fait pour cocher un checkbutton par défaut?
mmm.. de mémoire il faut faire un .set(1) sur la variable tkinter attachée au checkbutton.