Bonjour,
J'ai l'arbre de Newick suivant :
"((((A,B)1,C)2,((((D,E)3,F)4,G)5,(((((H,I)6,J)7,K)8,L)9,M)10)11)12,N)13;"
où les lettres sont les feuilles et les chiffres les nœuds, le ';' indique la racine et les parenthèses les filiations.
Je souhaite obtenir un dictionnaire qui associe un nœud avec ses deux enfants. Comme ceci : {1:('A','B'),2:('C',1),3:('D','E'),4:('F',3),5:('G',4),6:('H','I'),7:('J',6),8:('K',7),9:('L',8),10:('M',9),11:(10,5),12:(2,11),13:(12,'N')}
J'ai trouvé le code suivant :
qui renvoie l'arbre sous forme d'un dictionnaire mais je ne vois pas comment l'adapter à mon problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 import re def parse(newick): tokens = re.findall(r"([^;,()\s]*)(?:\s*\s*([\d.]+)\s*)?([,);])|(\S)", newick) def recurse(): children = [] name, length, delim, ch = tokens.pop(0) if ch == "(": while ch in "(,": node, ch = recurse() children.append(node) name, length, delim, ch = tokens.pop(0) return {"name": name,"children": children}, delim return recurse()[0]
Merci
Partager