Создание словаря Python из файла с несколькими одинаковыми значениями и ключами - PullRequest
0 голосов
/ 17 октября 2011

Я новичок в python (хорошо для кодирования в целом) и пытаюсь использовать его для анализа некоторых данных на работе.У меня есть файл, подобный этому:

    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 с разделителями.Я пытаюсь создать словарь, который содержит первое значение строки (уникальный идентификатор) в виде списка значений, который соответствует присоединенным последним 4 значениям в качестве ключа, например:

     {'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']}

Таким образомЗатем я могу получить список уникальных идентификаторов и сосчитать или отсортировать или сделать другие вещи, которые мне нужно сделать.Я могу сделать словарь, но когда я пытаюсь вывести его в файл, я получаю сообщение об ошибке.Я думаю, что проблема в том, что это список, я получаю сообщение об ошибке

Файл "trial.py", строка 33, в outFile.write ("% s \ t% s \ n"% ('\ t '.join (key, mutReadDict [key]))) TypeError: unhashable type:' list '

Есть ли способ заставить это работать, чтобы я мог иметь его в файле?Я попробовал .iteritems () в цикле for, создавая словарь, но это не сработало.Спасибо и вот мой код:

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()

1 Ответ

0 голосов
/ 17 октября 2011

Я думаю, вы хотите:

keyList = mutReadDict.keys()

вместо

keyList = [mutReadDict.keys()]

Вы, вероятно, тоже это имеете в виду:

for key in keyList:
    outFile.write("%s\t%s\n" % (key, '\t'.join(mutReadDict[key])))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...