[Python]

Résolu/Fermé
Utilisateur anonyme - 3 mai 2006 à 11:11
 Utilisateur anonyme - 3 mai 2006 à 15:39
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
3 mai 2006 à 14:22
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
3 mai 2006 à 14:30
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
3 mai 2006 à 14:32
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
3 mai 2006 à 14:33
Tu as bien dégagé les .append() ?
0

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

Posez votre question
Utilisateur anonyme
3 mai 2006 à 14:39
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
3 mai 2006 à 15:03
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
3 mai 2006 à 15:08
Ah merci!!!
Je commençais à douter des mes boucles.
A la prochaine......
0
Utilisateur anonyme > Utilisateur anonyme
3 mai 2006 à 15:20
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 mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 655
3 mai 2006 à 15:26
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
3 mai 2006 à 15:39
OK merci
Je testerai ça plus tard.
0