我在更新python字典中的值時遇到問題。我試圖更新一個嵌套的值(無論是作爲一個int或列表)爲一個拳頭級別的關鍵,而是我更新的值,所有第一級別的關鍵。python循環字典值引用更新所有值
我開始通過創建字典:從列表
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,未示出),並採取7聚體字符串(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」水平正在更新相同的值。我對字典不太擅長,我也看不到我的方式錯誤,但他們是深刻的!任何人都可以啓發我嗎?
希望我已經清楚了。我一直在修改這段代碼太久了:(
+1。或者將'innerdict'移到內部循環中。 – unutbu 2013-02-11 02:55:44
@unutbu - 是的,這將是一個更明智的修復不是嗎?我猜,今天鏟了太多的雪。 – mgilson 2013-02-11 02:57:17
硬背,但很好的睡眠。保持溫暖:) – unutbu 2013-02-11 02:59:02