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 :

Dictionnaire avec plusieurs clés


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 19
    Par défaut Dictionnaire avec plusieurs clés
    Bonjour ,

    je suis en train de travailler sur des dataframe.
    j'ai plusieurs dataFrame dont certains ont pour thème économie et d'autres social. Dans ces dataframe je trouve plusieurs attributs dans lesquels des années sont spécifiés dans les intitulés.

    j'ai donc fait le choix de faire un dictionnaire pour accéder au nom de mes colonnes.

    Il se présente comme suivant :

    IndicDep = { "Eco" :{2009 : ['tauxdemploi2009','partjeunesdiplomes2009','transportvoitures2009','transportcommun2009','transportautre2009'],2014 : ['tauxdemploi2014','partjeunediplome2014','transportvoitures2014','transportcommun2014','transportautre2014'],2017:['tauxdactivite2017'],2019:['tauxdactivite2019']},
    "Social" :{2008:['popinon2008'], 2009: ['jeune2009'], 2010: ['esph2010','espf2010'],2013:['popinon2013'], 2014 :['disp2014','pauv2014','jeune2014'],2015:['esph2015','espf2015'], 2016:['popserv2016'], 2017: ['jeune2017'], 2018:['pauv2018'], 2019:['esph2019','espf2019'],2020:['disp2020'],2021:['popserv2021'], 2022:['esph2022','espf2022']}}

    j'aimerai accéder à mes valeurs, par exemples 'tauxemploi2009' j'ai donc pensé faire appel comme suivant :

    case=IndicDep[theme][annee]

    cela ne fonctionne pas. Auriez-vous une autre solution à me conseiller ? ou pourriez vous me dire d'où pourrais venir mon problème ?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par elgateau Voir le message
    j'ai donc pensé faire appel comme suivant : case=IndicDep[theme][annee] cela ne fonctionne pas.
    "cela ne fonctionne pas" est une description plutôt vague. Quand "cela ne fonctionne pas", Python retourne l'instruction qui ne "fonctionne pas" en donnant quelques précisions sur le pourquoi cela ne fonctionne pas. Si tu juges que ces informations ne sont pas importantes ou si tu as tout simplement la flemme de les lire, il n'en va pas de même pour nous (et tu n'iras pas très loin dans Python).

    Accessoirement de mon côté "cela fonctionne".
    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
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par elgateau Voir le message
    Auriez-vous une autre solution à me conseiller ?
    Avant de proposer une solution, il faudrait savoir ce que tu fais ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print("Eco : ", IndicDep["Eco"])
    print("Social.2022 :", IndicDep["Social"][2022])
    print("Social.2022 :", IndicDep["Social"].get("2022"))
    print("Social.2022 :", IndicDep["Social"]["2022"])
    Ou, peut-être que tu es dans une boucle ? Et boucler sur un dico de dicos n'est pas forcément simple

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Ou, peut-être que tu es dans une boucle ?
    Ou peut-être plein de trucs (il n'est pas sur le même ordi, il n'est pas dans un code Python, etc etc etc).
    Déjà il parle de "theme" et "annee" il n'a même pas donné le contenu de ces variables. Peut-être que theme="social" ou que annee="2022"...
    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]

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Pour avoir un accès comme case=IndicDep[theme][annee], il faut avoir un "dictionnaire de dictionnaires".

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    ou que annee="2022"...
    En tant cas, mes 4 lignes de code m'ont appris quelque chose aujourd'hui, moi qui convertissais machinalement et sans réfléchir toujours les index numériques de dico en chaine (sachant très bien comment sont générés ces index !)

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Pour avoir un accès comme case=IndicDep[theme][annee], il faut avoir un "dictionnaire de dictionnaires".
    Ce qui est effectivement le cas de son dico initial (même si c'est un peu obfusqué)

    Citation Envoyé par papajoker Voir le message
    moi qui convertissais machinalement et sans réfléchir toujours les index numériques de dico en chaine
    C'est vrai que j'examinais tes lignes (enfin les 2 dernières) et je me disais "hum... a-t-il fait exprès ou s'est-il trompé?"
    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]

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    C'est vrai que j'examinais tes lignes (enfin les 2 dernières) et je me disais "hum... a-t-il fait exprès ou s'est-il trompé?"
    exprès oui, mais chez moi, c'est uniquement la ligne 2 qui serait en erreur (avec mon ancienne habitude)

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case=IndicDep[theme][annee]
    cela ne fonctionne pas. Auriez-vous une autre solution à me conseiller ? ou pourriez vous me dire d'où pourrais venir mon problème ?
    Attention l'année semble être un entier et non une chaîne dans le dictionnaire. Si on récupère une chaîne depuis une fonction input par exemple, il ne faut pas oublier le cast en entier, sinon effectivement "cela ne fonctionne pas".

    Chez moi ça passe bien en utilisant le pattern du PO.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    IndicDep = {    
        "Eco": {
            2009: [
                "tauxdemploi2009",
                "partjeunesdiplomes2009",
                "transportvoitures2009",
                "transportcommun2009",
                "transportautre2009",
            ],
            2014: [
                "tauxdemploi2014",
                "partjeunediplome2014",
                "transportvoitures2014",
                "transportcommun2014",
                "transportautre2014",
            ],
            2017: ["tauxdactivite2017"],
            2019: ["tauxdactivite2019"],
        },
        "Social": {
            2008: ["popinon2008"],
            2009: ["jeune2009"],
            2010: ["esph2010", "espf2010"],
            2013: ["popinon2013"],
            2014: ["disp2014", "pauv2014", "jeune2014"],
            2015: ["esph2015", "espf2015"],
            2016: ["popserv2016"],
            2017: ["jeune2017"],
            2018: ["pauv2018"],
            2019: ["esph2019", "espf2019"],
            2020: ["disp2020"],
            2021: ["popserv2021"],
            2022: ["esph2022", "espf2022"],
        },
    }
     
    print(
        IndicDep["Eco"][2009]
    )  # ['tauxdemploi2009', 'partjeunesdiplomes2009', 'transportvoitures2009', 'transportcommun2009', 'transportautre2009']

Discussions similaires

  1. Conteneur avec plusieurs clés pour une valeur
    Par insomniak dans le forum C++
    Réponses: 6
    Dernier message: 15/10/2006, 18h18
  2. insertion dans table avec plusieurs clés étrangères
    Par philippe281281 dans le forum Administration
    Réponses: 2
    Dernier message: 14/06/2006, 18h35
  3. [hibernate] relation one-to-many avec plusieurs clés
    Par seb_fou dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/03/2006, 14h47
  4. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 11h17
  5. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 17h24

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