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 :

Attaquer un dictionnaire par les 2 bouts


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut Attaquer un dictionnaire par les 2 bouts
    Bonjour,

    je voudrais savoir s'il existe un moyen d'attaquer un dictionnaire par les 2 bouts...
    Ou encore : peut accéder aux clefs à partir des valeurs ?
    Bien sûr, cela suppose que les valeurs soient toutes différentes (comme le sont les clefs), mais ça, dans mon cas, je le garantis.

    En fait, mon truc ressemble un peu à une a-liste du Lisp, càd une liste de paires.
    Si je donne la valeur d'un premier élément d'une paire, je récupère le second élément, et réciproquement.

    Merci et bonne semaine à tous

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    un bricolage pour inverser cles/valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dict(zip(a.values(),a.keys()))
    sinon fouille dans dir({})

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 8
    Par défaut
    Sinon, si tu pars d'une liste de paires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    liste_de_paires = ((1, 2), (3, 4))
    dico1 = dict(liste_de_paires)
    dico2 = dict((j, i) for (i, j) in liste_de_paires)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 25
    Par défaut
    Je ne sait pas si c'est ce que tu cherche mais je te propose quelque chose comme ci-dessous mais dans l'exemple d.get(4) : 4 seras toujours considéré comme la clef jamais comme la valeur
    ça n'est pas très fiable.
    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
     
    class dico(dict):
        def __init__(self, name=None):
            dict.__init__(self)
     
        def get(self,val):
            if self.has_key(val) == True:
                return self[val]
            else:
                for k,v in self.iteritems():
                    if v == val:
                        return k
    d = dico()
     
    d['pommes']= 15
    d["fraises"] = 4
    d[4]="Fraises"
     
     
     
    print d.get(15)
    print d.get("pommes")
    print d.get(4)

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par sopsag Voir le message
    Ou encore : peut accéder aux clefs à partir des valeurs ?
    Bien sûr, cela suppose que les valeurs soient toutes différentes (comme le sont les clefs), mais ça, dans mon cas, je le garantis.
    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def extrakt(paires,item):
        flat = sum(paires,())
        return flat[flat.index(item)^1]
     
    paires=( (1,('a',)), ([1,2,3],'x'), (5,'toto') )
    extrakt(paires,'x') #===> [1,2,3]
    extrakt(paires,'toto') #===> 5

  6. #6
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut
    Merci à tous !

    Secrètement, j'espérais une fonction toute faite du langage, mais si je ne l'ai pas trouvée (et vous non plus) c'est peut être parce qu'il n'y en a pas...

    En tous cas, j'aime beaucoup ta solution josmiley !
    Je pense, que du coup, la meilleure solution pour mon cas, c'est une classe qui contient mon dict sous forme d'une liste à plat et d'utiliser index (avec la ruse du "^1" ).

    encore merci

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

Discussions similaires

  1. Intégrer des bouts de scripts envoyés par les visiteurs
    Par thelvin dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/06/2013, 11h44
  2. Débogage corrompu par les optimisations du compilateur
    Par petitcoucou31 dans le forum EDI
    Réponses: 6
    Dernier message: 17/12/2003, 00h30
  3. [JVM] Connaitre la taille mémoire utilisé par les dif classe
    Par sur_uix dans le forum Général Java
    Réponses: 4
    Dernier message: 18/09/2003, 09h17
  4. Copies de flots en passant par les itérateurs
    Par Christophe Brun dans le forum C++
    Réponses: 7
    Dernier message: 02/07/2003, 11h41
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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