2014-02-12 30 views
0

“\ n”我有一本字典是这样的,在DNA是关键,质量值是值:消除字典

{'TTTGTTCTTTTTGTAATGGGGCCAGATGTCACTCATTCCACATGTAGTATCCAGATTGAAATGAAATGAGGTAGAACTGACCCAGGCTGGACAAGGAAGG\n': 
    'eeeecdddddaaa`]eceeeddY\\cQ]V[F\\\\TZT_b^[^]Z_Z]ac_ccd^\\dcbc\\TaYcbTTZSb]Y]X_bZ\\a^^\\S[T\\aaacccBBBBBBBBBB\n', 
'ACTTATATTATGTTGACACTCAAAAATTTCAGAATTTGGAGTATTTTGAATTTCAGATTTTCTGATTAGGGATGTACCTGTACTTTTTTTTTTTTTTTTT\n': 
    'dddddd\\cdddcdddcYdddd`d`dcd^dccdT`cddddddd^dddddddddd^ddadddadcd\\cda`Y`Y`b`````adcddd`ddd_dddadW`db_\n', 
'CTGCCAGCACGCTGTCACCTCTCAATAACAGTGAGTGTAATGGCCATACTCTTGATTTGGTTTTTGCCTTATGAATCAGTGGCTAAAAATATTATTTAAT\n': 
    'deeee`bbcddddad\\bbbbeee\\ecYZcc^dd^ddd\\\\`]``L`ccabaVJ`MZ^aaYMbbb__PYWY]RWNUUab`Y`BBBBBBBBBBBBBBBBBBBB\n'} 

我想编写一个函数,这样如果我查询的DNA序列,它返回该DNA序列的元组和相应的质量值

我写了下面的功能,但它给了我,说:list indices must be integers, not str

def query_sequence_id(self, dna_seq=''): 
    """Overrides the query_sequence_id so that it optionally returns both the sequence and the quality values. 
    If DNA sequence does not exist in the class, return a string error message""" 
    list_dna = [] 
    for t in self.__fastqdict.keys(): 
     list_dna.append(t.rstrip('\n')) 
    self.dna_seq = dna_seq 
    if self.dna_seq in list_dna: 
     return (self.dna_seq,self.__fastqdict.values()[self.dna_seq + "\n"]) 
    else: 
     return "This DNA sequence does not exist" 

所以我想一个错误信息像如果我打印

query_sequence_id("TTTGTTCTTTTTGTAATGGGGCCAGATGTCACTCATTCCACATGTAGTATCCAGATTGAAATGAAATGAGGTAGAACTGACCCAGGCTGGACAAGGAAGG"), 

我会得到

('TTTGTTCTTTTTGTAATGGGGCCAGATGTCACTCATTCCACATGTAGTATCCAGATTGAAATGAAATGAGGTAGAACTGACCCAGGCTGGACAAGGAAGG', 
'eeeecdddddaaa`]eceeeddY\\cQ]V[F\\\\TZT_b^[^]Z_Z]ac_ccd^\\dcbc\\TaYcbTTZSb]Y]X_bZ\\a^^\\S[T\\aaacccBBBBBBBBBB') 

我想摆脱“\ n”表示键和值的,但我的代码失败。任何人都可以帮我修复我的代码?

+1

为什么不去掉插入数据时不必要的换行符,然后根本就没有它们呢? – mikebabcock

回答

2

换行符不是你的问题,虽然它们很混乱。您正试图根据字符串为由dict.values()返回的view编制索引。这不仅不是你想要的,但它也摆脱了首先使用字典的全部目的。视图是可迭代的,而不是像字典那样的映射。只是仰望值在字典中,以正常的方式:

return (self.dna_seq, self.__fastqdict[self.dna_seq + "\n"]) 

至于新行,为什么不你建立在首位字典时只带他们出去?

+0

谢谢。你的修改是完美的! – neymar

0

要修改词典中,你可以做以下几点:

myNewDict = {} 
for var in myDict: 
    myNewDict[var.strip()] = myDict[var].strip() 
0

你可以从你的字典的键和这样的数值去掉这些讨厌的换行符(假设你的字典存储在一个名为dna变量):

dna = {k.rstrip(): v.rstrip() for k, v in dna.iteritems()}