Python で辞書の値を更新する際に問題が発生しています。単一の最初のレベルのキーのネストされた値 (int またはリストとして) を更新しようとしていますが、代わりにすべての最初のレベルのキーの値を更新します。
まず、辞書を作成します。
kmerdict = {}
innerdict = {'endcover':0, 'coverdict':{}, 'coverholder':[], 'uncovered':0, 'lowstart':0,'totaluncover':0, 'totalbases':0}
for kmer in kmerlist: # build kmerdict
kmerdict [kmer] = {}
for chrom in fas: #open file and read line
chromnum = chrom[3:-3]
kmerdict [kmer][chromnum] = innerdict
次に、リスト (fas、表示されていません) から染色体 (プレーン テキスト ファイルとして) をたどり、7mer 文字列 (k=7) をキーとして取得します。そのキーが探しているキーのリストにある場合 (kmerlist)、それを使用して、辞書にネストされた単一の値を参照しようとしています。
for chrom in fas: #open file and read line
chromnum = chrom[3:-3]
p = 0 #chromosome position counter
thisfile = "/var/store/fa/" + chrom
thischrom = open(thisfile)
thischrom.readline()
thisline = thischrom.readline()
thisline = string.strip(thisline.lower())
l=0 #line counter
workline = thisline
while(thisline):
if len(workline) > k-1:
thiskmer = ''
thiskmer = workline[0:k] #read five bases
if thiskmer in kmerlist:
thisuncovered = kmerdict[thiskmer][chromnum]['uncovered']
thisendcover = kmerdict[thiskmer][chromnum]['endcover']
thiscoverholder = kmerdict[thiskmer][chromnum]['coverholder']
if p >= thisendcover:
thisuncovered += (p - thisendcover)
thisendcover = ((p+k) + ext)
thiscoverholder.append(p)
elif p < thisendcover:
thisendcover = ((p+k) + ext)
thiscoverholder.append(p)
print kmerdict[thiskmer]
p += 1
workline = workline[1:]
else:
thisline = thischrom.readline()
thisline = string.strip(thisline.lower())
workline = workline+thisline
l+=1
print kmerdict
しかし、辞書を印刷すると、すべての「thiskmer」レベルが同じ値で更新されます。私は辞書が苦手で、自分のやり方に間違いは見当たりませんが、辞書は奥深いものです。誰でも私を啓発できますか?
私が十分に明確であることを願っています。私はあまりにも長い間このコードをいじっています:(