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 :

Utilisation d'un dictionnaire sérialisé


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut Utilisation d'un dictionnaire sérialisé
    Bonjourr,

    Je suis débutant python et j'utilise la version 2.7.6.
    J'ai créé un mini programme pour console (terminal) avec menu sur les calories.

    Voici mon dictionnaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'concombre': {'proteines': 2, 'glucides': 22, 'lipides': 0, 'categorie': 'legume', 'calories': 6}, 'boeuf': {'proteines': 11, 'glucides': 21, 'lipides': 43, 'categorie': 'viande', 'calories': 72}, 'ail frais': {'calcium': 38, 'glucides': 28.1, 'categorie': 'legume', 'magnesium': 36, 'sodium': 32, 'proteines': 6.0, 'potassium': 515, 'lipides': 0.1, 'calories': 138}, 'Cerise': {'proteines': 2, 'glucides': 22, 'lipides': 0, 'categorie': 'fruit', 'calories': 46}, 'poulet': {'proteines': 10, 'glucides': 20, 'lipides': 45, 'categorie': 'viande', 'calories': 84}, 'artichaud': {'proteines': 2, 'glucides': 20, 'lipides': 0, 'categorie': 'legume', 'calories': 36}, 'banane': {'proteines': 0, 'glucides': 20, 'lipides': 45, 'categorie': 'fruit', 'calories': 91}}
    Ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def f_affichage_03():
        donnees_aliments = charger_fichier_dico() #le dico
        est_un_dico = dict()
        for nom_aliment, donnees_aliment in donnees_aliments.items():
          if donnees_aliment['categorie'] == 'fruit':
    	        est_un_dico['Cerise'] = donnees_aliment	
          print "donnees_aliment :",  donnees_aliment['categorie'], donnees_aliment['calories'], donnees_aliment['proteines'], donnees_aliment['glucides'], donnees_aliment['lipides']
     
        print "aliment : ", est_un_dico
        print "nom_aliment :" , nom_aliment
    Je n'arrive pas à faire afficher les données du dico concernant cerise uniquement.
    comme ceci :
    et non pas comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    donnees_aliment : legume 6 2 22 0
    donnees_aliment : viande 72 11 21 43
    donnees_aliment : legume 138 6.0 28.1 0.1
    donnees_aliment : fruit 46 2 22 0
    donnees_aliment : viande 84 10 20 45
    donnees_aliment : legume 36 2 20 0
    donnees_aliment : fruit 91 0 20 45
    aliment :  {'Cerise': {'proteines': 0, 'glucides': 20, 'lipides': 45, 'categorie': 'fruit', 'calories': 91}}
    je me mélange les pinceaux

    Comment dois-je procéder ?

    Merci.
    Intel I7 960 | 6 Go Ram | 5 HDD au total 3636 Go | Windows 7 Edition intégral x64 | WampServer 2.0c | Apache 2.2.8 | Php 5.2.6 | MySQL 5.0.51b
    DreamPlug | 512 mo ram | SSD 16 GO | Linux debian 2.6.39.4 | armv5tel | Lamp | PHP 5.3.3-7 | Apache 2.2.16 | Mysql 14.14

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    ton code (ta fonction) est plutôt déroutant par rapport au but recherché ...

    • utilisation d'un autre dictionnaire : pourquoi ?
    • test sur la catégorie 'fruit' alors qu'on ne s'intéresse qu'aux cerises ? les bananes sont aussi des fruits
    • des 'print' de ci de là, avec une mauvaise indentation


    Citation Envoyé par xunil2003
    je me mélange les pinceaux
    Effectivement. Et pas qu'un peu

    Tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for aliment, donnees in donnees_aliments.iteritems():
        if aliment == 'Cerise':
            print aliment, donnees['categorie'], donnees['calories'], donnees['proteines'], donnees['glucides'], donnees['lipides']
            break
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        est_un_dico = dict()    # est_un_dico >> {}
        for nom_aliment, donnees_aliment in donnees_aliments.items():
          if donnees_aliment['categorie'] == 'fruit': # par exemple: 'banane': {'proteines': 0, ... 'categorie': 'fruit', ...}
    	        est_un_dico['Cerise'] = donnees_aliment  # est_un_dico >> {'Cerise': {données de banane}}
    En plus je vois que tu as des indentations pour le moins fantasques.

  4. #4
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        est_un_dico = dict()    # est_un_dico >> {}
        for nom_aliment, donnees_aliment in donnees_aliments.items():
          if donnees_aliment['categorie'] == 'fruit': # par exemple: 'banane': {'proteines': 0, ... 'categorie': 'fruit', ...}
    	        est_un_dico['Cerise'] = donnees_aliment  # est_un_dico >> {'Cerise': {données de banane}}
    En faisant ça, on mettra dans est_un_dico['Cerise'] le dernier élément ayant la 'categorie' valant 'fruit'.
    On est alors tributaire de la fonction de hashage utilisée pour gérer les clés d'un dictionnaire. C'est le dernier 'fruit' qui gagne !

    je récupère (les print) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    aliment :  {'Cerise': {'categorie': 'fruit', 'glucides': 20, 'lipides': 45, 'proteines': 0, 'calories': 91}}
    nom_aliment : poulet
    la 'Cerise' a les propriétés de la 'banane'. Quant à nom_aliment ...
    Ma 'Cerise' c'est du 'poulet' !
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  5. #5
    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
    Exactement.

    En fait xunil2003 se plaint de ne pas avoir le print qu'il aimerait mais ne réalise pas que les données sont inexactes.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    plxpy à écrit:
    utilisation d'un autre dictionnaire : pourquoi
    test sur la catégorie 'fruit' alors qu'on ne s'intéresse qu'aux cerises ? les bananes sont aussi des fruits
    Je pensais qu'il fallait récupérer les données filtrées "fruit" dans un nouveau dico.

    Merci.
    Intel I7 960 | 6 Go Ram | 5 HDD au total 3636 Go | Windows 7 Edition intégral x64 | WampServer 2.0c | Apache 2.2.8 | Php 5.2.6 | MySQL 5.0.51b
    DreamPlug | 512 mo ram | SSD 16 GO | Linux debian 2.6.39.4 | armv5tel | Lamp | PHP 5.3.3-7 | Apache 2.2.16 | Mysql 14.14

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par xunil2003 Voir le message
    Je pensais qu'il fallait récupérer les données filtrées "fruit" dans un nouveau dico.
    Pourquoi faire ??? Quand tu as 5€ de monnaie dans ta poche droite, et que tu veux payer ton café à 1€20, est-ce que tu fais passer 1€20 de la poche droite dans la gauche ???

    Tu as tes infos dans une variable. Ca ne sert absolument à rien de les recopier dans une autre avant de les traiter...
    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]

Discussions similaires

  1. Utiliser le dictionnaire personnel uniquement
    Par Burt67 dans le forum Word
    Réponses: 1
    Dernier message: 26/05/2010, 18h28
  2. Réponses: 0
    Dernier message: 06/02/2010, 20h29
  3. Utilisation du Dictionnaire Word
    Par Zaki_SDwin dans le forum Débuter
    Réponses: 2
    Dernier message: 09/03/2008, 21h01
  4. [Access2003][VBA]Utilisation des Dictionnaires
    Par hoaxpunk dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/05/2007, 21h21

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