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é :roll:
je dispose d'un fichier texte tabulé contenant 2 colonnes d'intérêts :
Code:
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:
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:
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:
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 :?
Un petit tour sur les tutos ?
Bonsoir,
En soit il est impossible que dico[cols[0]] ne retourne rien.
Code:
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)
@+