Bonjour à tous,
Voila plusieurs jours que j'essaye de me démêler avec un bout de code en vain, pas étonnant, sachant que je suis nouveau en python et n'en saisi pas encore toute la logique.
J'aimerais, à partir d'un dictionnaire, remplacer toutes les occurrences contenues dans une liste de plusieurs listes. D'une manière plus claire, on a :
les sequences = [['TTT[T/G]TTT'], ['GGG[A/C]TTT']]
Et le dictionnaire = {'A':'A','C':'C','G':'G','T':'T','[A/C]':'M','[A/G]':'R','[A/T]':'W','[C/G]':'S','[C/T]':'Y','[G/T]':'K','[C/A]':'M','[G/A]':'R','[T/A]':'W','[G/C]':'S','[T/C]':'Y','[T/G]':'K'}
Et j'aimerais obtenir :
sequences = [['TTTKTTT'], ['GGGMTTT']].
Sachant que j'ai plusieurs dizaines de listes dans ma liste sequences contenant quasiment tous au moins une clé de mon dictionnaire.
J'ai commencé ça :
1) J'obtiens bien le remplacement mais uniquement des caractères seuls (A, T, C, G)
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 dictionnaire = {'A':'A', 'C':'C', 'G':'G', 'T':'T', '[A/C]':'M', '[A/G]':'R', '[A/T]':'W', '[C/G]':'S', '[C/T]':'Y', '[G/T]':'K', '[C/A]':'M', '[G/A]':'R', '[T/A]':'W', '[G/C]':'S', '[T/C]':'Y', '[T/G]':'K'} for lettres in str(Sequences): print iupacdict.get(lettres)
2) J'obtiens un seul caractère par ligne
J'ai donc essayé ça :
Mais j'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 mregex = '' for lettres in Sequences: mregex += iupacdict.get(lettres) print mregex tosearch = re.compile(str(mregex)) for i in tosearch.findall(Sequences): print i
Traceback (most recent call last):
File "tmp.py", line 84, in <module>
mregex += iupacdict.get(lettres)
TypeError: unhashable type: 'list'
Je ne sais donc pas trop comment m'en défaire, auriez-vous quelques pistes à me donner pour obtenir le résultat souhaité ?
Merci, bonne journée,
Emmanuel.
Partager