IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

initialisation d'un dictionnaire


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 6
    Points
    6
    Par défaut initialisation d'un dictionnaire
    Bonjour,

    j'ai un paramètre de départ : taille qui peut valoir 2,3 ou 4.
    je souhaite initialiser un dictionnaire où les clefs sont les entiers de 0 à 4 pour valeurs associées [1,2,...,taille**2]
    Puis je vais être amener à supprimer des éléments des valeurs.

    taille=3
    valeurs=[]
    for k in range(taille**2):
    valeurs.append(k+1)
    dico={}
    for i in range(5):
    dico[i]=valeurs

    et si je fais
    dico[1].remove(2)

    le 2 est supprimé pour toutes les clefs.

    Ce doit être une subtilité de la programmation objet, valeurs pointe vers une référence et lorsque je modifie dans une clef, ça modifie les autres. Comment y remédier ? Je pourrais imbriquer la boucle k dans la boucle i mais je ne trouve pas cela économe (mais ça fait ce que je veux!)

    D'avance merci.

    SB

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    auto-réponse

    faire list(valeurs) dans les affectations aux clefs du dictionnaire.

    SB

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    C'est normal, les listes sont passées par référence, donc c'est la même liste qui sert pour chaque valeur du dico.

    Tu as trouvé une solution, une autre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dico[i] = valeurs[:]
    Et puis on peut simplifier en compliquant (Python3):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    >>> t = 3
    >>> d = {i:list(range(1, t**2+1)) for i in range(5)}
    >>> d
    {0: [1, 2, 3, 4, 5, 6, 7, 8, 9], 1: [1, 2, 3, 4, 5, 6, 7, 8, 9], 2: [1, 2, 3, 4, 5, 6, 7, 8, 9], 3: [1, 2, 3, 4, 5, 6, 7, 8, 9], 4: [1, 2, 3, 4, 5, 6, 7, 8, 9]}
    >>> d[2].remove(4)
    >>> d
    {0: [1, 2, 3, 4, 5, 6, 7, 8, 9], 1: [1, 2, 3, 4, 5, 6, 7, 8, 9], 2: [1, 2, 3, 5, 6, 7, 8, 9], 3: [1, 2, 3, 4, 5, 6, 7, 8, 9], 4: [1, 2, 3, 4, 5, 6, 7, 8, 9]}

Discussions similaires

  1. Initialiser un dictionnaire
    Par Papy214 dans le forum C#
    Réponses: 2
    Dernier message: 24/02/2009, 15h14
  2. initialiser un dictionnaire
    Par elekis dans le forum Général Python
    Réponses: 3
    Dernier message: 17/03/2006, 11h03
  3. [servlet] initialisation d'objets
    Par tiPouick dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 05/08/2003, 12h12
  4. Initialisation de XMLModule
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 10
    Dernier message: 01/04/2003, 10h08
  5. initialisation Directinput avec delphi
    Par Madmaxx dans le forum DirectX
    Réponses: 1
    Dernier message: 21/02/2003, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo