[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

  1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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
  2. 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
  3. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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
  4. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Tu as bien dégagé les .append() ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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. Utilisateur anonyme
       
      Ah merci!!!
      Je commençais à douter des mes boucles.
      A la prochaine......
      0
      1. 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
  8. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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. Utilisateur anonyme
       
      OK merci
      Je testerai ça plus tard.
      0