[Python]

Résolu
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

7 réponses

sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
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.
0
Utilisateur anonyme
 
J'ai bien essayé mais ça ne change rien.
J'ai les mêmes valeurs pour toutes les lignes.
Je ne comprends pas....
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
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']}}
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
Tu as bien dégagé les .append() ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
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?
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
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()
0
Utilisateur anonyme
 
Ah merci!!!
Je commençais à douter des mes boucles.
A la prochaine......
0
Utilisateur anonyme > Utilisateur anonyme
 
Seb si tu es encore là.....
Juste une petite question.
Comment on fait pour cocher un checkbutton par défaut?
Je voudrais que dès l'ouverture, certains soient cochés.
Merci
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
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.
0
Utilisateur anonyme
 
OK merci
Je testerai ça plus tard.
0