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 :

Syntaxe pour un multi Dictionnaire [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 29
    Par défaut Syntaxe pour un multi Dictionnaire
    Bonjour,

    J'ai une petite question concernant la syntaxe d'un multi-dictionnaire. L'idée est ici, d'insérer des dictionnaires dans un dictionnaire. Je prendrais ici pour vous montrer mon problème avec facilité, le cas d'un annuaire.

    J'aimerai classer ces données dans un dictionnaire de façon à ce que lorsque je tapes:
    annuaire['Paris'] = Jean,Cécile
    annuaire['Paris']['Yves']['âge'] = 70ans
    """
    info = Jean,Paris,49ans,célibataire;Yves,Bruxelles,70ans,divorcé;Cécile,Paris,13ans,étudiante
    """

    Mon problème est que, lorsqu'il y a plus de deux habitants dans la même ville, il ne m'affiche qu'un seul habitant (le dernier traité par Python), autrement dit, il n'y a toujours qu'une seule valeur pour une clé alors que je veux plusieurs valeurs pour une clé.

    Merci d'avace

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Speakers Voir le message
    autrement dit, il n'y a toujours qu'une seule valeur pour une clé
    Hé oui, c'est exactement la façon dont doit fonctionner un tableau associatif dans la théorie des langages (tableau associatif étant représenté par un dictionnaire sous Python)...

    Citation Envoyé par Speakers Voir le message
    alors que je veux plusieurs valeurs pour une clé.
    Ben place toutes tes valeurs dans une liste, liste qui s'incrémente au fur et à mesure que tu découvres de nouveaux habitants...

    Exemple minimaliste
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    habitants={}
    for (clef, personne) in (truc_qui_me_retourne_une_clef_et_une_personne):
        if clef not in habitants: habitants[clef]=[]
        habitants[clef].append(personne)
    # for

    Citation Envoyé par Speakers Voir le message
    info = Jean,Paris,49ans,célibataire;Yves,Bruxelles,70ans,divorcé;Cécile,Paris,13ans,étudiante
    C'est quoi ta clef la dedans ??? Accessoirement "célibataire" et "divorcé" sont une situation de famille alors que "étudiante" est une activité ce qui n'a rien à voir...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 29
    Par défaut
    Bonjour, merci de m'avoir répondu.

    Je me rends compte ne pas avoir été assez précis dans ma demande, j'ai ciblé trop de choses à la fois.

    J'aimerai savoir s'il est possible d'ajouter plusieurs valeurs à une clé sans que la dernière valeur soit nécessairement supprimé.

    liste = ['coucou','merci','aurevoir']
    dico = {}

    dico[1] = 'merci' #j'ajoute la valeur merci à la clé 1
    dico[1] = 'coucou' #j'ajoute la valeur coucou à la clé 1 MAIS la valeur merci est supprimé...

    Y-a-t-il possibilité d'ajouter les deux valeurs simultanément autre que le fait de les insérer dans un tuple? Merci encore Sw@n

  4. #4
    Membre expérimenté Avatar de zancrows
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2016
    Messages : 159
    Par défaut
    bonjour,

    tu peux pas le faire autrement qu'avec un tuple.
    après si ca te gêne pas tu peux faire ceci;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dic= {}
    dic[0] = 'merci'
    dic[0] += 'bonjour'
    print(dic) # >>> {0: 'mercibonjour'}
    mais tout sera dans une chaine de caractère.

    ps: pense aux balises pour le code

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Citation Envoyé par Speakers Voir le message
    Bonjour, merci de m'avoir répondu.

    Je me rends compte ne pas avoir été assez précis dans ma demande, j'ai ciblé trop de choses à la fois.

    J'aimerai savoir s'il est possible d'ajouter plusieurs valeurs à une clé sans que la dernière valeur soit nécessairement supprimé.

    liste = ['coucou','merci','aurevoir']
    dico = {}

    dico[1] = 'merci' #j'ajoute la valeur merci à la clé 1
    dico[1] = 'coucou' #j'ajoute la valeur coucou à la clé 1 MAIS la valeur merci est supprimé...

    Y-a-t-il possibilité d'ajouter les deux valeurs simultanément autre que le fait de les insérer dans un tuple? Merci encore Sw@n
    Bonjour

    Si tu veux ajouter/supprimer des valeur, le tuple n'est pas adapté. Par contre, pourquoi ne pas utiliser une liste ou un set ?


    EDIT :
    Citation Envoyé par Speakers Voir le message
    Bonjour,

    J'ai une petite question concernant la syntaxe d'un multi-dictionnaire. L'idée est ici, d'insérer des dictionnaires dans un dictionnaire. Je prendrais ici pour vous montrer mon problème avec facilité, le cas d'un annuaire.

    J'aimerai classer ces données dans un dictionnaire de façon à ce que lorsque je tapes:
    annuaire['Paris'] = Jean,Cécile
    annuaire['Paris']['Yves']['âge'] = 70ans
    """
    info = Jean,Paris,49ans,célibataire;Yves,Bruxelles,70ans,divorcé;Cécile,Paris,13ans,étudiante
    """

    Mon problème est que, lorsqu'il y a plus de deux habitants dans la même ville, il ne m'affiche qu'un seul habitant (le dernier traité par Python), autrement dit, il n'y a toujours qu'une seule valeur pour une clé alors que je veux plusieurs valeurs pour une clé.

    Merci d'avace
    J'ai du mal à comprendre ce que tu essaie de faire mais quand je lis ton code, ça me fais penser à un dictionnaire de dictionnaire...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    annuaire= {}
    annuaire['Paris'] = {}
    annuaire['Paris']['Jean'] = {}
    annuaire['Paris']['Jean']['âge'] = "49ans"
     
    print(annuaire['Paris'])
    print(annuaire['Paris']['Jean']['âge'])

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nom Voir le message
    quand je lis ton code, ça me fais penser à un dictionnaire de dictionnaire...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    print(annuaire['Paris']['Jean']['âge'])
    Mouais. C'est ce que je me suis dit aussi au début. Mais ce qui m'a retenu de partir là dessus c'est cette possibilité éventuelle de demander à la place print(annuaire['âge']['Paris']['Jean']). Me semblait (bien que ce ne soit pas écrit) que le PO souhaitait aussi pouvoir faire cette interrogation qui ressemble à du NoSQL et qui est impossible avec le dictionnaire tel que tu l'as défini...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 29
    Par défaut
    Bonjour, merci pour vos réponses.

    Sve@r, vous avez tout à fait raison, ma question portait bien sur des dictionnaires dans des dictionnaires d'ou le titre ''multi-dictionnaire''.

    En fait, j'ai un projet ou l'on me donne un fichier.txt composé de données sur des supers héros: (nom,ville,téléphone,pouvoir,puissance)

    Spiderman;NewYork;4572;grimper sur les murs,tisser une toile;72
    Batman;GothamCity;4792;voler;100
    GreenLantern;NewYork;2475;mentalisme;84

    J'essaye de convertir les données du fichier en un dictionnaire de plusieurs dictionnaires de façon à pouvoir appeler les éléments plus facilement dans mon programme.

    Exemple: ['NewYork']['Spiderman']['puissance'] renvoie 72.

    Pour convertir le fichier en un dictionnaire, voici mon raisonnement:

    1) Création du dictionnaire de base nommé ''dictionnary'' (dictionnary = {})
    2) Parcourir la première ligne du fichier.
    3) Transformer cette ligne en liste avec la méthode .split(";")
    4) dictionnary[info[1]] = {info[0]}

    Le 4ème point me pose problème car les villes sont bien crées dans le dictionnaire mais il n'y a qu'un super-héro pour chaque ville, le plus ancien ajouté par le programme est supprimé. D'ou ma question d'avant, j'aimerai pouvoir ajouter un super-héro dans une ville sans que le dernier soit nécessairement supprimé. J'ai essayé avec la méthode += mais l'interpréteur m'affiche une erreur.

    Nom : test.png
Affichages : 1419
Taille : 16,1 Ko

    Merci encore.

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Bonjour,

    Ce qu'il te faudrait faire à mon avis, c'est de récupérer les infos (liste des super-hero) d'une ville et si la ville n'est pas encore connue dans ton "dictionnary", créer une liste vide et ajouter les nouvelles infos.
    Tu peux le faire avec la fonction get .

    Je me suis pris au jeu de tes super-héros et j'ai abouti à un petit bout de code qui fait à peu près ce que tu cherches à obtenir.
    Totuefois, avant de regarder ce code (sans prétention et sans garantie ), je te conseille vivement d'essayer par toi-même.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    infos=['Spiderman;NewYork;4572;grimper sur les murs,tisser une toile;72', 'Batman;GothamCity;4792;voler;100', 'GreenLantern;NewYork;2475;mentalisme;84']
     
    dictionnary={}
     
    for info in infos:
      hero, ville, telephone, pouvoirs, puissance=info.split(';')
      habitants = dictionnary.get(ville, [])
      habitants.append((hero, telephone, pouvoirs.split(','), puissance))
      dictionnary[ville] = habitants
     
    from pprint import pprint as pp
    pp(dictionnary)

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 29
    Par défaut
    Merci Fifan31, ta réponse a définitivement résolu mon problème.

    Grand merci également à tout ceux qui ont pris le temps de répondre à ma demande d'aide: Sve@r, zancrows, Nom.

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

Discussions similaires

  1. syntaxe pour compilation conditionnelle ?
    Par tintin72 dans le forum C
    Réponses: 9
    Dernier message: 17/05/2005, 18h12
  2. Choix de SGBD et Middleware pour logiciel multi-postes.
    Par Benjamin GAGNEUX dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/09/2004, 12h39
  3. [analyse de syntaxe] pour C et C++ sur Linux
    Par Madmac dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/07/2004, 06h37
  4. [windows] recherche outils coloration syntax. pour -> htm
    Par hpfx dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 02/10/2003, 01h52
  5. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51

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