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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    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.

  2. #2
    Membre Expert 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 : 60
    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
    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

  3. #3
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    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 Expert 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 : 60
    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
    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' !

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    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 éclairé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    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.

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