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 :

Création d'un dictionnaire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut Création d'un dictionnaire
    Bonjour,

    Sauriez-vous svp comment créer un dictionnaire du style {Nom: Age,Taille}, à partir d'un texte comme celui-ci :

    Nom1 Age1 Taille1
    Nom2 Age2 Taille2
    Nom3 Age3 Taille3
    Nom4 Age4 Taille4
    Nom5 Age5 Taille5
    Nom6 Age6 Taille6

    Merci d'avance,

    Cordialement,
    Arsène

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Salut,

    Il faut faire une boucle qui récupère chaque ligne, "splitte" la ligne en (nom, age, taille) et ajoute une entrée au dictionnaire dont la clef sera nom associée à la liste/tuple de valeurs age, taille.

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

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    f=open("myText2.txt","r",encoding="utf-8-sig")
    contenu=f.read()
    f.close()
     
    f5=open("DicoMots.txt","w",encoding="utf-8")
    for ligne in contenu:
        myDict = contenu.split()
     
    f5.write(str(myDict))
    f5.close()
    Avec ce code j'obtiens une liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['Nom1', 'Age1', 'Taille1', 'Nom2', 'Age2', 'Taille2', 'Nom3', 'Age3', 'Taille3', 'Nom4', 'Age4', 'Taille4', 'Nom5', 'Age5', 'Taille5', 'Nom6', 'Age6', 'Taille6']
    Comment dois-je faire pour avoir un dictionnaire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Nom1: 'Age1', 'Taille1', Nom2: 'Age2', 'Taille2', Nom3: 'Age3', 'Taille3'...]

  4. #4
    Membre chevronné
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 514
    Par défaut
    split renvoie une liste, à quel moment espérez vous avoir un dico ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myDict = {}
    for ligne in contenu:
    	myDict[ligne.split()[0]] = (ligne.split()[1], ligne.split[2])
    quelques conseils :
    - utilisez "with"pour les fichiers
    - faites attention à l'écriture de votre code: (PEP 8), je suis pas non plus expert mais il faut se forcer à suivre une ligne de conduite(pep8 si possible) au moins que se soit la même tout le long de votre code... Je vous conseil un tour ici : http://sametmax.com/le-pep8-en-resume/ (après c'est pas forcement strict hein: tab ou espace, 79 caractères par ligne que je ne respecte pas)
    myDict -> my_dict
    f5=open(..) -> f5 = open(..)
    "DicoMots.txt","w",encoding="utf-8" -> "DicoMots.txt", "w", encoding="utf-8"..
    - si vous voulez sauvegarder votre dico dans un fichier vous allez avoir une surprise .. utilisez JSON est une bonne option.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Salut,

    Citation Envoyé par Arsene12 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    f=open("myText2.txt","r",encoding="utf-8-sig")
    contenu=f.read()
    f.close()
     
    f5=open("DicoMots.txt","w",encoding="utf-8")
    for ligne in contenu:
        myDict = contenu.split()
     
    f5.write(str(myDict))
    f5.close()
    Avec ce code j'obtiens une liste. [/QUOTE]

    Ca ne sert à rien de passer par des fichiers. Avec Python, vous pouvez écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    contenu = '''Nom1 Age1 Taille1
    Nom2 Age2 Taille2
    Nom3 Age3 Taille3
    Nom4 Age4 Taille4
    Nom5 Age5 Taille5
    Nom6 Age6 Taille6'''
    et partir sur un contenu significatif pour tester vos idées.
    Cà vous permet de "voir" que contenu est d'abord une séquence de caractères et que for ligne in contenu: ne va pas découper contenu en lignes mais en caractères.
    De plus, écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ligne in contenu:
        myDict = contenu.split()
    et assigner n-fois à la variable myDict la liste retournée par contenu.split() n'a aucun intérêt et c'est pas parce que vous avez appelé une variable ligne ou myDict qu'elles vont êtes associées à ce que vous voulez.
    Puisque vous connaissez .split, vous savez découper contenu en lignes et chaque lignes en mots: il vous suffirait de réfléchir un peu. Et pour fabriquer un dictionnaire, il faut commencer par ouvrir votre tuto. préféré et y chercher le ou les chapitres qui parlent de dictionnaire.

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

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Par défaut
    Merci pour tous ces conseils.

    J'ai pas encore trouvé la solution. J'ai essayé d'appliquer le code proposé dans cette discussion :

    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
    contenu = '''Nom1 Age1
    Nom2 Age2
    Nom3 Age3
    Nom4 Age4'''
    f5=open("DicoMots.txt","w",encoding="utf-8")
    dico = {}
    for ligne in contenu:
        element = ligne.split(" ")
        cle = element[0]
        data = element[1]
        #dico.setdefault(cle, data)
        dico[cle] = data
    print (dico)       
    f5.write(str(dico))
    f5.close()
    mais j'ai un bug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data = element[1]
    IndexError: list index out of range

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    J'ai pas encore trouvé la solution. J'ai essayé d'appliquer le code proposé dans cette discussion
    Si vous ne savez pas encore utiliser listes et dictionnaires (qui sont des structures de base), vous ne comprendrez pas le code que vous aurez récupéré et vous écrirez n'importe quoi.
    Quand j'écris que ligne est réduit à un caractère, çà a des conséquences:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> ligne = 'a'
    >>> ligne.split()
    ['a']
    >>> ligne.split()
    qui expliquent l'IndexError (pour autant que vous sachiez ce qu'est une liste).
    Force est de constater que vous ne comprenez pas ce que je dis simplement parce que vous n'avez pas pris le temps de vous former à minima sur Python... Le but est d'avoir un minimum de vocabulaire commun pour pouvoir échanger des idées (plutôt que du code prêt à l'emploi, car on n'est pas là pour faire votre boulot). C'est une des raisons pour laquelle vous n'êtes pas supposé poster ici sans avoir fait l'effort de vous former à minima.

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

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

Discussions similaires

  1. Création d'un dictionnaire bilingue console Windows
    Par Deutschland92 dans le forum Mon programme
    Réponses: 0
    Dernier message: 19/03/2014, 19h57
  2. [XL-MAC 2011] Création d'un dictionnaire
    Par ienien75 dans le forum Conception
    Réponses: 3
    Dernier message: 04/06/2012, 13h46
  3. Création d'un dictionnaire en XAML
    Par Tod_sd dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/11/2009, 09h08
  4. Réponses: 1
    Dernier message: 05/10/2009, 17h00

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