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 :

clé avec plusieurs valeurs dans un dictionnaire


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut clé avec plusieurs valeurs dans un dictionnaire
    bonjour à tous
    c'est la première fois que je publie dans un forum et j'ai besoin d'aide car je suis complétement novice en informatique.
    on nous a demandé dans un exercices python de faire un script qui indexe les pages et renvoi le mot trouver comme clé et L’URL comme valeur d'un dictionnaire. jusque là tous se passe bien mais le soucis c'est que quand j'indexe plusieurs pages, j'ai dans mon dictionnaire:
    mot1 : [url1]
    mot1 : [url2]
    mot1 : [url3]
    je voudrais avoir plutot: mot1 : [url1, url2, url3]
    voici ce que jai fait:
    def ajoute(dex, mot, url):
    if mot in dex: dex.get(mot, ' ') + url
    else: dex[mot] = [url]
    return dex
    mais j'ai toujours le même problème , cela fait plus d'un mois que suis bloqué dessus et malgré mais recherche je ne trouve aucune réponse je vais devenir folle merci à ceux qui vont m'aider

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 857
    Points : 7 176
    Points
    7 176
    Par défaut
    Les listes ont une méthode append pour ajouter des éléments dedans.
    Si dex[mot] retourne une liste, alors il suffira de faire dex[mot].append(url) pour faire cet ajout.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut merci pour reponse
    j'ai en effet aussi essayer ça voici tout les code de l'exercice:

    def pilote(f, {}) :
    url = f if f.startswith('https://') else None
    flux = urlopen(f) if url else open(f)
    charset = get_charset(f) if url else None
    for n, texte in enumerate(flux) :
    X = indexe(X, texte.split(), url)
    flux.close()
    return prd(X)

    def indexe(dex, mots, url):
    for mot in mots:
    mot = nettoie(mot)
    if mot.lower() in golist : dex = ajoute(dex, mot, url)
    else : pass
    return dex

    et voici les fonction ajoute() que j'ai essayé:
    def ajoute(dex, mot, url):
    if mot in dex: dex.get(mot, '') + url
    else: dex[mot] = url
    return dex

    def ajoute(dex, mot, url):
    for n, mot in dex:
    if mot in dex.iterkeys(): dex[mot].append(url)
    else: dex[mot] = [url]
    return dex

    def ajoute(dex, mot, val):
    for mot, val in dex.items():
    if mot in dex.iterkeys(): dex[mot].append(val)
    else: dex[mot] = val
    return dex

    mais aucune n'a marché

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut:

    En Python on préfère demander pardon plutôt que la permission, donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def ajoute(dex, mot, url):
        try:
            dex[mot].append(url)
        except KeyError:
            dex[mot] = [url]
        # Pas de return nécessaire
    De préférence évite le mode compact, on n'y gagne rien et on perd en lisibilité.
    Ça c'est pas clair du tout:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if mot in dex: dex.get(mot, '') + url
    else: dex[mot] = url
    return dex
    et aussi supprime ces accolades dans les arguments de la fonction pilote, on se demande ce que ça fiche là.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut merci pour vos conseilles
    j'ai essayé le code mais il me renvoi ce message d'erreur TypeError: 'NoneType' object has no attribute '_getitem_
    qu'est ce que cela veut dire?

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    j'ai rajouté return dex a la fonction pour reglé le problemes du Nonetype et apres essaie j'ai cela:Nom : fonction ajoute().png.png
Affichages : 1447
Taille : 91,0 Ko
    ça ne marche toujours pas

  7. #7
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Non, tu ne dois pas rajouter return dex, c'est la raison du problème.

    Les objets mutables sont passés par référence ce qui signifie que ta fonction ajoute() modifie directement le dictionnaire qui lui a été passé.

    Ce qui change:

    1. tu dois d'abord créer ton dictionnaire dans la fonction pilote()
    2. tu changes la fonction indexe()
    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 pilote(f):
        url = f if f.startswith('https://') else None
        flux = urlopen(f) if url else open(f)
        charset = get_charset(f) if url else None
        dex = {}
        for n, texte in enumerate(flux):
            indexe(dex, texte.split(), url)
        flux.close()
        return prd(dex)
     
    def indexe(dex, mots, url):
        for mot in mots:
            mot = nettoie(mot)
            if mot.lower() in golist: 
                ajoute(dex, mot, url)
    D'autre part le nom golist est inconnu à cet endroit là

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    salut VinsS,
    Est ce que c’est possible de vous envoyé tout mon code par message privé. j'ai essayé ça mais j’ai encore un message d'erreur TypeError: argument of type 'NoneType' is not iterable. en faite golist est un liste contenant les mots que je doit chercher dans les sites a indexé.

  9. #9
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Si ton code est trop long tu peux le joindre en attachement ici même avec ton post.

    Une fonction ne peut traiter que des données (ou objet) dont elle a connaissance, golist est définit quelque part ailleurs et ta fonction ne sait pas ce que c'est.

    Quand tu poste un message d'erreur il faut copier-coller le traceback complet qui apparaît dans ton terminal sinon on ne comprend pas. Quoique je devine mais, comme dit le sage, "In the face of ambiguity, refuse the temptation to guess."

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    personne pour m'aider?

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par dabys Voir le message
    personne pour m'aider?
    C'est un long week end ensoleillé dont il faut profiter pour prendre l'air... D'autant qu'on a déjà répondu à la question initiale.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    ok merci à vous

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/03/2018, 12h54
  2. [Python 2.X] [Dictionnaire][multivaleur] Incrémenter plusieurs valeurs dans un dictionnaire
    Par jk3531 dans le forum Général Python
    Réponses: 13
    Dernier message: 28/07/2015, 01h08
  3. [Toutes versions] Fonction FIND avec plusieurs valeurs dans une meme cellule.
    Par Manu3100 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 05/07/2015, 18h56
  4. Réponses: 7
    Dernier message: 24/11/2014, 15h58
  5. [AC-2007] Création d'etat avec plusieurs valeurs dans un seul champ
    Par k.p-j dans le forum IHM
    Réponses: 3
    Dernier message: 02/05/2012, 16h07

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