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

Calcul scientifique Python Discussion :

Conversion d'un dictionnaire en variables


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Conversion d'un dictionnaire en variables
    Bonjour,

    Je suis nouveau sur ce forum. Je cherche en effet à convertir clés d'un dictionnaire (de type string) en des noms de variables auxquels seront affectés les valeurs de ces clés (qui sont de type float), et mettre tout ça dans une fonction qui retourne ces variables.

    mon dico à la forme : Dico={'a':1.2,'b':1.5}

    Voici la fonction que j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def convert_dict_to_var (Dico):
     
        for converted_key,v in Dico.iteritems():
    #        exec("global %s" %converted_key)
            exec("%s=v" %converted_key)
    #        if converted_key=='b' : print b
    les variables sont crées (le test if) mais je n'arrive pas à les faire visible dans le programme principal.

    Quelqu'un pourrait-il m'aider ?
    Merci

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def convert_dict_to_var(Dico):
        for converted_key, v in Dico.iteritems():
            exec("%s=v" %converted_key, locals(), globals()) # < Ici
            if converted_key == 'b':
                print b 
     
    Dico={'a':1.2, 'b':1.5}
    convert_dict_to_var(Dico)
    print b
    @+

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci Beaucoup, ça marche parfaitement, ça fait des heures que je cherche la solution !!
    Merci encore

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Re,

    Un petit 'warning' toutefois.

    Bon code

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Comme globals, contrairement à locals, n'est pas en lecture seule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def convert_dict_to_var(Dico):
        for converted_key, v in Dico.iteritems():
            globals()[converted_key] = v
            if converted_key == 'b':
                print b 
     
    Dico={'a':1.2, 'b':1.5}
    convert_dict_to_var(Dico)
    print b
    @+

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,

    Auriez-vous une idée comment faire pour retourner ces variables (à priori non connus) avec l'instruction return au lieu de les définir comme variables globales dans le module où la fonction convert_dict_to_var est définie. en d'autre terme je cherche à appeler cette fonction à partir d'un autre module.

    Merci pour votre aide

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    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 351
    Points : 36 875
    Points
    36 875
    Par défaut ?hu?
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dico= dict(a=1.2, b=1.5)
    globals().update(Dico)
    mais je n'ai peut être pas tout compris

    - W

  8. #8
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par dje_bibou Voir le message
    Bonsoir,

    Auriez-vous une idée comment faire pour retourner ces variables (à priori non connus) avec l'instruction return au lieu de les définir comme variables globales dans le module où la fonction convert_dict_to_var est définie. en d'autre terme je cherche à appeler cette fonction à partir d'un autre module.

    Merci pour votre aide
    Ben... Dans ce cas vous avez des variables (Dico) dans l'autre module et non dans celui ci, non ?

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    dans un module nommé Inputs.py, je mets :
    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
    def read_parameters (file_name):
        """
        read_parameters --> une fonction qui lit le fichier formaté des paramètres de la simulation et qui retourne 
        un dictionnaire de paramètres:
            Paramètres: Nom du fichier contenant les paramètres
            Sortie    : Un dictionnaire de paramètres et leurs valeurs  type Dico={'a':1.2, 'b':1.5}   
        """
        ...
        ...
     
        return(parameters)
     
    def convert_dict_to_var(Dico):
        for converted_key, v in Dico.iteritems():
            exec("%s=v" %converted_key, locals(), globals())
    et dans un autre module où j'appelle ces fonctions je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from Inputs import *
     
    if __name__ == '__main__':
     
        P=read_parameters("Parameters.txt")
        convert_dict_to_var(P)
     
        print b
    et là j'ai le message :
    NameError: name 'rhos_w' is not defined
    J'ai essayé de mettre un return(converted_key) sous la boucle for, mais ça n'a pas l'air de renvoyer toute les variables (peut être une seule la première ou la dernière)
    Je cherche à faire ça car j'aurai à créer plusieurs modules qui utilisent ces variables; donc je ne veux pas réinsérer le code à chaque fois.
    Merci

  10. #10
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Pourquoi ne pas faire quelque chose comme ceci:

    Inputs.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #! /usr/bin/env/ python
    # -*- coding: utf-8 -*-
    # 
    #
    def read_parameters(file_name):
        """
        read_parameters --> une fonction qui lit le fichier formaté des paramètres de la simulation et qui retourne 
        un dictionnaire de paramètres:
            Paramètres: Nom du fichier contenant les paramètres
            Sortie    : Un dictionnaire de paramètres et leurs valeurs  type Dico={'a':1.2, 'b':1.5}   
        """
        parameters = {'a':1.2, 'b':1.5}
        for converted_key, v in parameters.iteritems():
            yield(converted_key, v)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #! /usr/bin/env/ python
    # -*- coding: utf-8 -*-
    # 
    #
    from Inputs import *
     
    if __name__ == '__main__':
        for converted_key, v in read_parameters("Parameters.txt"):
            globals()[converted_key] = v
        print a, b
    @+

  11. #11
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Ou, mieux avec la proposition de wiztricks.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #! /usr/bin/env/ python
    # -*- coding: utf-8 -*-
    # 
    #
    def read_parameters(file_name):
        """
        read_parameters --> une fonction qui lit le fichier formaté des paramètres de la simulation et qui retourne 
        un dictionnaire de paramètres:
            Paramètres: Nom du fichier contenant les paramètres
            Sortie    : Un dictionnaire de paramètres et leurs valeurs  type Dico={'a':1.2, 'b':1.5}   
        """
        parameters = {'a':1.2, 'b':1.5}
        return parameters
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #! /usr/bin/env/ python
    # -*- coding: utf-8 -*-
    # 
    #
    from Inputs import *
     
    if __name__ == '__main__':
        P = read_parameters("Parameters.txt")
        globals().update(P)
        print a, b
    @++

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci Beaucoup, la deuxième solution me convient mieux !
    Thanks !

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

Discussions similaires

  1. Aide pour la fonction recherche et dictionnaire de variable
    Par Esmax dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/09/2010, 21h47
  2. Conversion d'un dictionnaire Python en Tcl
    Par t_om84 dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 23/09/2009, 18h30
  3. conversion de type et de variable
    Par dirty_harry dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 04/06/2009, 12h11
  4. Conversion contenu objet File en variable String
    Par theleek dans le forum JSF
    Réponses: 2
    Dernier message: 20/12/2007, 11h31
  5. conversion d'un string en variable
    Par a_centaure dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/09/2007, 12h38

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