2011-10-17 1 views
0

Je suis novice en python (et en général en codage) et j'essaie de l'utiliser pour analyser certaines données au travail. J'ai un fichier comme ceci:Construction d'un dictionnaire Python à partir d'un fichier avec plusieurs valeurs et clés similaires

HWI-ST591_0064:5:1101:1228:2111#0/1 + 7included 11 A>G - - 
    HWI-ST591_0064:5:1101:1205:2125#0/1 + genomic 17 A>G - - 
    HWI-ST591_0064:5:1101:1178:2129#0/1 + 7included 6 A>C 8 A>T 
    HWI-ST591_0064:5:1101:1176:2164#0/1 + 7included 6 A>T 8 A>G 
    HWI-ST591_0064:5:1101:1199:2234#0/1 + 7included 14 T>C 21 G>A 
    HWI-ST591_0064:5:1101:1208:2249#0/1 + 7included 32 C>T - - 

Tab délimité. Je suis en train de créer un dictionnaire qui contient la première valeur de la ligne (un identifiant unique) comme une liste de valeurs correspondant aux 4 dernières valeurs jointes comme la clé, comme ceci:

 {'32C>T--': ['HWI-ST591_0064:5:1101:1208:2249#0/1'], 
    '6A>C8A>C': ['HWI-ST591_0064:5:1101:1318:2090#0/1'], 
    '36A>G--': ['HWI-ST591_0064:5:1101:1425:2093#0/1'], 
    '----': ['HWI-ST591_0064:5:1101:1222:2225#0/1'], 
    '6A>C8A>T': ['HWI-ST591_0064:5:1101:1178:2129#0/1','HWIST591_0064:5:1101:1176:2164#0/1']} 

De cette façon, je peux puis obtenez une liste des identifications uniques et comptez ou trier ou faire les autres choses que je dois faire. Je peux obtenir le dictionnaire, mais quand j'essaie de le sortir dans un fichier, j'obtiens une erreur. Je pense que le problème est parce que c'est une liste, je continue à obtenir l'erreur

Fichier "trial.py", ligne 33, dans outFile.write ("% s \ t% s \ n"% ('\ t '.join (clé, mutReadDict [clé]))) TypeError: type non-insérable:' list '

Existe-t-il un moyen de faire ce travail afin que je puisse l'avoir dans un fichier? J'ai essayé .iteritems() sur la boucle for faisant le dictionnaire mais cela n'a pas semblé fonctionner. Merci et voici mon code:

inFile = open('path', 'rU') 
outFile = open('path', 'w') 

from collections import defaultdict 

mutReadDict = defaultdict(list) 

for line in inFile: 
entry    = line.strip('\n').split('\t') 
fastQ_ID   = entry[0] 
strand    = entry[1] 
chromosome   = entry[2] 
mut1pos    = entry[3] 
mut1base   = entry[4] 
mut2pos    = entry[5] 
mut2base   = entry[6] 

mutKey = mut1pos + mut1base + mut2pos + mut2base 

if chromosome == '7included': 
    mutReadDict[mutKey].append(fastQ_ID) 
else: 
    pass 

keyList = [mutReadDict.keys()] 
keyList.sort() 

for key in keyList: 
outFile.write("%s\t%s\n" % ('\t' .join(key, mutReadDict[key]))) 

outFile.close() 

Répondre

0

Je pense que vous voulez:

keyList = mutReadDict.keys() 

au lieu de

keyList = [mutReadDict.keys()] 

Vous voulez dire sans doute cela aussi:

for key in keyList: 
    outFile.write("%s\t%s\n" % (key, '\t'.join(mutReadDict[key]))) 
+0

ah ha! Je vous remercie. J'ai aussi dû réparer le .join. La clé doit être en dehors de la fonction de jointure. superbe. –

+0

pas de soucis. Veuillez également accepter la réponse si elle répond à votre question. – bw1024

Questions connexes