[Python]

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

  1. Modérateur
    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
    1. OK merci
      Je testerai ça plus tard.
      0
  2. Modérateur
    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
    1. Ah merci!!!
      Je commençais à douter des mes boucles.
      A la prochaine......
      0
    2. @Utilisateur anonymeSeb 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
  3. 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
    1. Modérateur
      Tu as bien dégagé les .append() ?
      0
      1. Modérateur
        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
        1. J'ai bien essayé mais ça ne change rien.
          J'ai les mêmes valeurs pour toutes les lignes.
          Je ne comprends pas....
          0
          1. Modérateur
            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