Bonjour,

Je débute en Python et voiçi ce que je souhaite faire. Récupérer la position de tout les mots 'AZERTY'
en ignorant les caractères '-'
J'ai un dictionnaire qui ressemble à ça (appelons le m)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
{
  'toto' : { 'seq' : 'AZER-TY'}, 
  'score': 1202,
  'tata' : { 'seq' : 'OSEF-AZERTY'},
  'foo' : { 'seq' : 'AZ-ERTY'},  
  'score' : 31415,
  'faa' : {'seq' : 'TRUCMUCHEBIDULE-A-Z-E-R-T-Y'}
}
J'ai une liste liste_m contenant plusieurs dictionnaires m différents mais tous ayant le même modèle.

Voiçi mon code :
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
# @type : function
#*@name : position
# @resume : retourne la position (début et fin) de la sequence reconnue dans TOUT le dictionnaire
# @param dico_total : <type lst>, liste de dictionnaire contenant tout les alignements
#*@param seqs_reconnues : <type lst>, liste contenant tout les mots a tester
 
def position(dico_total, seqs_reconnues):
	for i in dico_total:
		#print i,"TOTO"
		for j in i:
			if j!='score':
				#print j,"                                                ","TuTu"
				for k in seqs_reconnues:			
					print k,':',[l.span() for l in re.finditer(k, i[j]['seq'])]
 
position(liste_m, ['AZERTY'])

J'explique l'idée du code :
La première boucle permet de rentrer dans le 1er élément de la liste (donc le premier dictionnaire)
La seconde boucle permet de travailler dans les différentes clefs de premier niveau (toto et foo ici)
La boucle k n'est ici que si on recherche plusieurs mots donc osef
Le print final permet d'afficher la liste des positions trouvées.
On recherche avec re.finditer et notre mot dans la string qui a toujours 'seq' pour clef et on recup sa position avec span(). On boucle sur le finditer afin de récupérer toutes les itérations de ce mot On place ensuite toutes les positions dans une liste avant de le printer.


Ma fonction parvient à récuperer la position du mot dans tata mais je souhaiterais qu'il fasse fi des '-' et récupère les position de tout les autres tout en prenant en compte dans les position des '-' ignorés pour la reconnaissance du mot.

Par exemple le mot sera reconnu en foo avec pour span : (0,6).
Voilà si vous avez une petite idée pour m'aider , j'espère avoir été clair mais n'hésitez pas à demander des éclairssissements si nécessaire.

Merci à vous