2016-04-28 2 views
1
tiny_reads = [ 
Sequence('CGTGCAA'), 
Sequence('TGCAATG'), 
Sequence('ATGGCGT'), 
Sequence('GGCGTGC'), 
Sequence('CAATGGC'),] 



dictionary = {} 

def kmers(reads, k): 
for line in tiny_reads: 
    for kmer in line.iter_kmers(k, overlap=3): 
     dictionary[str(kmer)] = 1 
     print(dictionary) 
     if str(kmer) not in dictionary: 
      dictionary[str(kmer)] = 1 
     else: 
      dictionary[str(kmer)] += 1 


#print(dict) 
kmers(tiny_reads, 3) 
print(dictionary) 

私のコードは上記のシーケンスを繰り返し、iter_kmer()を使用してシーケンスをサイズ3の小さな読み取り( 'CGT')に分割します。私はこれらすべての小さな読み込みを持つ辞書を作成し、それらがシーケンス内にどれくらいあるかのカウントを作成したいと思います。結果は、私は取得していないと私はなぜか分からない。辞書のpythonで鍵が見つかった場合の更新値

期待される結果:

kmers(tiny_reads、3) { 'AAT':2 'ATG':3、... 'TGG':2}

マイ結果: {[ CAG ':2、' GCG ':2、' GCG ':2、' ATG ':2、' TGC ':2、' CGT ':2、' AAT ':2、' GGC ' :2、 'TGG':2}

'ATG'が3回繰り返されるため、結果が正しくありません。あなたは私をイライラさせてくれますか?

答えて

0

iter_kmersの仕組みは正確にはわかりませんが、おそらくあなたは次のようなものを探していますか?これはおそらく最速の実装ではありません、しかし、それは単に、最小限の変更でエラーを修正することを念頭に置いて

tiny_reads = [ 
    Sequence('CGTGCAA'), 
    Sequence('TGCAATG'), 
    Sequence('ATGGCGT'), 
    Sequence('GGCGTGC'), 
    Sequence('CAATGGC') 
] 

kmer_d = dict() 

def kmers(reads, k): 
    for tiny_r in tiny_reads: 
     for kmer in tiny_r.iter_kmers(k, overlap=3): 
      d = kmer_d.get(str(kmer), 0) 
      kmer_d[str(kmer)] = d + 1 


if __name__ == "__main__": 
    kmers(tiny_reads, 3) 
    print(kmer_d) 

ベア。 はあなたを介して反復されているあなたは何のエントリが

+0

これは大変ありがとうございました。 – Mufassa

3

あなたはすべての行と辞書にカウンタをリセットしているが見つからない場合にデフォルト値を設定することができますに.get()メソッドを使用して、辞書から値を読み出す場合:

あなたがすでに持っているコードでは、defaultdictを使用します。

from collections import defaultdict 

def kmers(reads, k): 
    dictionary = defaultdict(int) 
    for line in tiny_reads: 
     for kmer in line.iter_kmers(k, overlap=3): 
      dictionary[str(kmer)] += 1 

私はおそらく一緒にすべての行を連結して、カウンターを使用するコードを書いていた場合。

def kmers(reads, k): 
    accumlator = [] 
    for line in tiny_reads: 
     accumlator += line.iter_kmers(k, overlap=3): 
    dictionary = Counter(accumlator) 
+1

ありがとう – Mufassa

関連する問題