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 :

dictionnaire avec plus une valeur ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 90
    Par défaut dictionnaire avec plus une valeur ?
    Bonjour

    est que c'est possible de assigner plus une valeur pour une clé d'un dictionnaire sous python

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Bonjour

    Non directement, mais il existe des solutions. Par parenthèse, le question est
    légèrement ambiguë. S'agit-il d'un dict dont les éléments sont des liste de valeurs ou un dict dont les clef sont "multi-champs" ?

    A tout hasard, voici un exemple de chaque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # Dictionnaire à VALEURS multiple par clef
    dico_multivaleur = dict(a=[1,2],b=[],c=[5,6,7])
     
    # Dictionnaire à clef MULTIVALEUR
    dico_clemultiple = {('a',1):7,('a',2):'I',('b',6):'H'}
    Rien n'impose, dans le premier cas, d'utiliser des listes. On peut ainsi avoir un dict de dict.

    Par contre, dans le second, pour que ça marche, il faut impérativement que la clef soit hashable. Un tuple, par exemple.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 90
    Par défaut
    Citation Envoyé par chticricri Voir le message
    Bonjour

    Non directement, mais il existe des solutions. Par parenthèse, le question est
    légèrement ambiguë. S'agit-il d'un dict dont les éléments sont des liste de valeurs ou un dict dont les clef sont "multi-champs" ?

    A tout hasard, voici un exemple de chaque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # Dictionnaire à VALEURS multiple par clef
    dico_multivaleur = dict(a=[1,2],b=[],c=[5,6,7])
     
    # Dictionnaire à clef MULTIVALEUR
    dico_clemultiple = {('a',1):7,('a',2):'I',('b',6):'H'}
    Rien n'impose, dans le premier cas, d'utiliser des listes. On peut ainsi avoir un dict de dict.

    Par contre, dans le second, pour que ça marche, il faut impérativement que la clef soit hashable. Un tuple, par exemple.

    Merci chticricri pour votre repense , pour les gent qui on la même question voir ICI



    mais maintenant j'ai un autre problème ,je eut remplir un fichier dans un dictionnaire mais les données dans mon fichier sont stocker comme suite ''par exemple'' :


    doc1 consulter 1 0.0795202091199
    doc1 régies 2 0.15904041824
    doc1 licence, 1 0.0795202091199
    doc1 licence. 1 0.0795202091199
    doc1 contrat 4 0.31808083648
    doc1 logicielles 1 0.0795202091199
    doc1 averti 1 0.0795202091199
    doc1 message 1 0.0795202091199
    doc1 recevrez 1 0.0795202091199
    doc1 recevez 1 0.0795202091199
    doc1 examiner 1 0.0795202091199
    doc1 recevoir 1 0.0795202091199
    doc2 démarrer, 1 0.15904041824
    doc2 figure 1 0.15904041824
    doc2 update. 1 0.15904041824
    doc2 cette 1 0.15904041824
    doc2 update) 1 0.15904041824
    doc2 n'ouvre 1 0.15904041824
    doc2 l'avenir, 1 0.15904041824
    doc2 configuration. 1 0.0
    doc2 jour 2 0.0
    doc2 puis 1 0.15904041824
    doc2 menu 1 0.15904041824
    doc2 automatiquement 1 0.0
    doc2 page 1 0.15904041824
    doc3 booléen 1 0.11928031368
    doc3 while. 1 0.11928031368
    doc3 l'utilisez 1 0.11928031368
    doc3 break, 1 0.11928031368
    doc3 parfois, 1 0.11928031368
    doc3 appréhender 1 0.11928031368
    doc3 termes 1 0.0
    doc3 précisant 1 0.11928031368
    doc3 cas-là 1 0.11928031368
    doc3 s'en 1 0.11928031368
    doc3 exemple, 1 0.11928031368
    doc3 lettre 1 0.11928031368
    doc3 break 2 0.23856062736
    doc3 voir 1 0.11928031368
    doc3 claire 1 0.11928031368


    pour remplir mon dictionnair j'ai fait ça


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
     
    def remplir(numDoc):
     
        fileindex=open("doc_poid_gloabal.txt" ,"r").read().split("\n")
        indexDec={}
        listindex=[ word.split("  ") for word in fileindex]
        result=[]
        nbr=0
        print 'la longuer de listindex ',len(listindex)
        for word in  listindex:
            if (len(word[0].split())>1):// pour eviter les blanc  
                indexDec[word[0].split()[0]]=(word[0].split()[1],word[0].split()[2],word[0].split()[3])
     
       print 'indexDec   ',indexDec


    voici le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    indexDec    {'doc2': ('page', '1', '0.15904041824'), 'doc3': ('claire', '1', '0.11928031368'), 'doc1': ('feter', '1', '0.0954242509439')}

    mais moi je veut garder tout les information du doc2 par exemple dans le dictionnaire mais comme " doc2 " est une clé il garde la dernier information

    comment je peut faire ça

    indexDec {'doc2': ('page', '1', '0.15904041824'),('démarrer', 1,'0.15904041824'),doc2****,****,***,),(***,***,***)....}

    est que c'est possible de faire ça


    Merci

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Dans un dict (on dit aussi tableau associatif), les clefs sont, au plus, présentes
    une fois. Il est donc logique que, dans ton code, tu écrase systématiquement la valeur précédente par la nouvelle.

    Pour éviter cela, le mieux est de voir, comme dans mon exemple, chaque item de ton dict comme une liste.

    A la lecture d'une clef, tu dois tester si celle-ci existe.
    • Si non, créer une nouvelle liste pour cette clef dico[clef]=[valeur]
    • Si oui, faire un append : dico[clef].append(valeur)

    Ce n'est pas plus compliqué que cela

  5. #5
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Citation Envoyé par chticricri Voir le message
    A la lecture d'une clef, tu dois tester si celle-ci existe.
    • Si non, créer une nouvelle liste pour cette clef dico[clef]=[valeur]
    • Si oui, faire un append : dico[clef].append(valeur)

    Ce n'est pas plus compliqué que cela
    Pour info, c’est faisable en une seule ligne*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_dict.setdefault(my_key, []).add(elem)
    …renvoie les données indexées par my_key si cette clé est déjà présente dans le dico, sinon il crée l’entrée correspondante, lui assigne le second paramètre (ici, une liste vide), et le renvoie. Très pratique*!

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 90
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Pour info, c’est faisable en une seule ligne*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my_dict.setdefault(my_key, []).add(elem)
    …renvoie les données indexées par my_key si cette clé est déjà présente dans le dico, sinon il crée l’entrée correspondante, lui assigne le second paramètre (ici, une liste vide), et le renvoie. Très pratique*!
    je vous remeirci pour votre repense j'ai essayé t'on code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    def remplir(numDoc):
    
        fileindex=open("doc_poid_gloabal.txt" ,"r").read().split("\n")
        indexDec={}
        listindex=[ word.split("  ") for word in fileindex]
        result=[]
        nbr=0
        
        for word in  listindex:
            if (len(word[0].split())>1):
                print 'len(word[0].split()[0]',word[0].split()[0],len(word[0].split()) 
                nbr=nbr+1
                print 'nbr ',nbr
                
                indexDec.setdefault(word[0].split()[0], []).add((word[0].split()[1],word[0].split()[2],word[0].split()[3]))
                    
    
        print 'indexDec   ',indexDec

    mais il affiche cette erreur



    AttributeError: 'list' object has no attribute 'add'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 01/07/2015, 17h24
  2. Récupérer une clé dans un dictionnaire à partir d'une valeur.
    Par alaninho dans le forum Général Python
    Réponses: 3
    Dernier message: 05/05/2011, 10h13
  3. Réponses: 7
    Dernier message: 05/12/2008, 09h26
  4. champ avec une valeur?
    Par sonialem2000 dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/06/2004, 08h23
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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