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 :

clé multi champs dans un dictionnaire


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut clé multi champs dans un dictionnaire
    Bonjour,
    J'ai un cas d'école, si j'ai un dictionnaire d avec les valeurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    d[('a','xxx')] = 'toto'
    d[('b','yyy')] = 'titi'
    d[('c','yyy')] = 'tata'
    Comment obtenir simplement (autrement qu'en faisant une boucle sur toutes les valeurs existantes de la clé) les éléments correspondant à la valeur yyy dans le 2 eme champ de la clé, dans l'exemple : 'titi' et 'tata'.
    Merci

  2. #2
    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,

    Je ne sais pas faire ça sans boucle, mais voilà au moins une solution en une ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    d = {}
    d[('a','xxx')] = 'toto'
    d[('b','yyy')] = 'titi'
    d[('c','yyy')] = 'tata'
    print dict([x for x in d.iteritems() if isinstance(x[0],tuple) and len(x)>1 and x[0][1]=='yyy'])
     
    {('b', 'yyy'): 'titi', ('c', 'yyy'): 'tata'}
    Et dans la mesure où la clé (donc ici le tuple) est 'hashé' pour accélérer la recherche, je ne vois pas comment on pourrait interroger directement le 2ème élément du tuple. Mais pourquoi pas: il y a tellement de choses possibles avec Python...

    Tyrtamos

  3. #3
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    ok merci.
    Je cherchais plutot une solution liée à la syntaxe en python pour manipuler les dictionnaires, du genre et éviter de faire la boucle et le test sur le 2eme champ.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Ce que tu cherches n'existes pas. La solution de tyrtamos est un peu verbeuse car elle fait pas mal de vérifications, mais si tu sais que tes clés sont toutes de tuples de longueur >= 2, le plus court que je peux te proposer est ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print [d[k] for k in d if k[1] == 'yyy']
    Il n'y a aucun moyen d'éviter un parcours de toutes les clés.

  5. #5
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    merci, ça me convient

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2015, 17h24
  2. [AC-2007] Sql Pivot multi champs dans une colonne
    Par Rafikaccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 18/01/2013, 17h03
  3. [OpenOffice][Base de données] Modification de champ dans une requete multi-table
    Par Kigwenn dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 15/06/2009, 09h44
  4. Réponses: 3
    Dernier message: 11/07/2007, 10h10
  5. Réponses: 7
    Dernier message: 26/10/2006, 15h13

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