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 :

Récupérer les clés de mon dictionnaire


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Par défaut Récupérer les clés de mon dictionnaire
    Bonjour,

    je vais expliquer brièvement ce que je cherche à faire avant de poser ma question, pour plus de clarté

    je dispose d'un fichier texte tabulé contenant 2 colonnes d'intérêts :

    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
    Ensembl Gene ID                                              
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000003
    ENSG00000000005
    ENSG00000000005
    ENSG00000000005
    ENSG00000000005
    ENSG00000000005
    ENSG00000000005
    ENSG00000000419
    et
    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
     
    EntrezGene ID
    7105
    7105
    7105
    7105
    7105
    7105
    7105
    7105
    7105
    7105
    7105
    7105
    64102
    64102
    64102
    64102
    64102
    64102
    8813
    8813
    8813
    8813

    Il y a une correspondance entre ces valeurs, à chaque IDEntrez correspond un ENSG.
    (Ces 2 colonnes sont côte a côte).

    Enfin je dipose d'un second fichier avec une colonne d'intérêt, il s'agit encore d'IDEntrez :

    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
    Entrez Gene Interactor A
    6416
    84665
    90
    2624
    6118
    375
    377
    377
    10327
    54464
    351
    333
    10370
    2033
    338
    409
    1436
    7916
    27257
    6521
    602
    Et voila ce que j'essaye de faire, je veux associer à ces IDEntrez (juste au dessus), les ENSG qui leurs sont associés (comme dans le premier fichier). L'ordre n'est bien evidemment pas le même, je ne peux pas faire de copier coller.

    Pour résoudre ce problème j'ai donc fais un script python (merci à afranck64 et à PauseKawa) pour comparer les IDEntrez des 2 fichiers, et en cas d'égalité, j'aimerai "print" dans un fichier l'IDEntrez et son ENSG associé, comme dans le 1er fichier.

    Le script est assez simple, j'ai crée un dictionnaire à partir du premier fichier, les clés du dictionnaire correspondent aux ENGS, et les valeurs aux IDEntrez associés.
    Je compare donc les valeurs de mon dictionnaire (correspondants aux IDEntrez) à la colonne de mon second fichier contenant les autres IDEnrtez. En cas d'égalité, je voudrai associer l'ENSG (clé du dictionnaire) à l'IDEntrez de mon second fichier.

    Le problème est que je n'arrive pas à récupérer la clé du dictionnaire pour l'associer à l'IDEntrez correspondant.







    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
     
     
    File = open("mart_export-1.txt","r")    # r indique lecture
     
    File2 = open("BIOGRID-ORGANISM-Homo_sapiens-3.1.81.tab2.txt","r")    # r indique lecture
     
    sortie = open("test.txt", "wb")
     
     
     
    dico={}
     
     
     
    for ligne in File.readlines():
     
    	ligne = ligne.rstrip('\n') # on retire le dernier caractere (retour chariot)
    	cols = ligne.split(',')    # Decoupage de la ligne pour recuperer les differents elements
     
     
    	if dico.has_key(cols[0])==False: #si la valeur lue n'est pas une cle du dico, alors on l'ajoute
    		dico[cols[0]]= cols[3]   # on attribut a cette cle la valeur situee dans la colonne 3 (IDENTREZ)
    	else:
    		pass
     
     
    for ligne2 in File2.readlines():
    	ligne2 = ligne2.rstrip('\n') # on retire le dernier caractere (retour chariot)
    	cols2 = ligne2.split('	')    # Decoupage de la ligne pour recuperer les differents elements
    	if cols2[1] in dico.values():   # si la valeur de la colonne correspond a la valeur de mon dico : ok
     
    		print >>sortie, "'%s','%s'" % (cols2[1], dico[cols[0]])
    Le problème vient donc de mon qui ne me retourne rien, et je ne vois pas comment faire pour récupérer les différentes clés du dictionnaire.

    Désolé pour le pavé, j'éspère ne pas avoir été trop confus dans mes explications.

    Si jamais vous pensez à une autre stratégie pour faire le "pont" entre ces données je suis preneur, l'utilisation du dictionnaire m'avait paru être une bonne idée mais je commence à en douter

  2. #2
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Citation Envoyé par tom77380 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print >>sortie, "'%s','%s'" % (cols2[1], dico[cols[0]])
    L'élément "cols2[0]" n'a t-il pas la même valeur que ce que vous cherchez dans "cols[0]"?
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #3
    Membre Expert 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
    Par défaut Un petit tour sur les tutos ?
    Bonsoir,

    En soit il est impossible que dico[cols[0]] ne retourne rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> dico = {2: 2}
    >>> liste = [1, 2]
    >>> dico[liste[0]]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 1
    >>> dico[liste[1]]
    2
    Si dico[cols[0]] ne retourne rien avez vous penser au 'print' juste avant ? (print cols)

    @+

  4. #4
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Bon, alors, si j’ai bien compris le problème, tu fais une erreur de conception fondamentale, en utilisant pour ton dict l’ENSG comme clé, et l’IDEntrez comme valeur, puisque tu veux ensuite retrouver l’ENSG correspondant à chaque IDEntrez de ton second fichier… Il faut faire l’inverse (c-à-d IDEntrez comme clé, et ENSG comme valeur).

    Ensuite, utiliser cols dans la seconde boucle est absurde, car cette variable reste figée sur la dernière ligne du premier fichier*!

    Enfin, au lieu de print >> fichier (est-ce que ça marche en python, d’ailleurs*?), mieux vaut utiliser fichier.write, amha…

    Bref, voilà un code qui devrait faire ce que tu veux –*évidemment, non testé*:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    with open("mart_export-1.txt","r") as ifl_ref, \
         open("BIOGRID-ORGANISM-Homo_sapiens-3.1.81.tab2.txt","r") as ifl_data, \
         open("test.txt", "wb") as ofl:
        dico={}
        for ligne in ifl_ref:
            cols = ligne.rstrip('\n').split(',')
            if not cols[3] in dico:
                dico[cols[3]] = cols[0]
     
        for ligne in ifl_data:
            cols = ligne.rstrip('\n').split('	')
            if cols[1] in dico:
                ofl.write("'%s','%s'\n" % (cols[1], dico[cols[1]]))

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 53
    Par défaut
    Merci beaucoup pour vos conseils et pour ce code qui marche parfaitement, un grand merci à vous

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

Discussions similaires

  1. Récupérer les clés primaires "perdues"
    Par Dnx dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/07/2006, 17h13
  2. [JSTL] Récupérer les parametres de mon bean
    Par ganga dans le forum Taglibs
    Réponses: 2
    Dernier message: 22/06/2006, 16h45
  3. récupérer les pilotes de mon ordinateur
    Par mathieu_r dans le forum Autres Logiciels
    Réponses: 15
    Dernier message: 29/03/2006, 12h21
  4. [javascript] récupérer les "clés" d'un tableau
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 10h13
  5. Récupérer les dimensions de mon image.
    Par Trilby dans le forum ASP
    Réponses: 3
    Dernier message: 10/02/2005, 09h52

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