python循环字典值引用更新所有值

2024-05-08 23:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用python更新字典中的值时遇到问题。我试图为一个第一级键更新一个嵌套值(可以是int或list),但是我更新了所有一级键的值。在

我从创建字典开始:

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)中,并尝试使用该键引用字典中嵌套的单个值:

^{pr2}$

但是当我打印字典时,所有的“thiskmer”级别都会更新为相同的值。我对字典不是很在行,我看不出我的错误,但它们是深刻的!有人能启发我吗?在

希望我已经足够清楚了。我已经修改这个代码太久了:(


Tags: in列表for字典listintfaskmer
1条回答
网友
1楼 · 发布于 2024-05-08 23:22:07

我没有花时间去弄清楚你所有的代码,只是第一部分。第一个问题是在设置中:

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

创建innerdict一次,然后继续重复使用同一个字典。换句话说,每个kmerdict[kmer][chromnum]引用相同的对象。也许把最后一行改成:

^{pr2}$

会有帮助(在文件顶部适当导入copy)?或者,您可以将innerdict的创建移动到内部循环中,如注释所示:

def get_inner_dict():
    return {'endcover':0, 'coverdict':{}, 'coverholder':[], 'uncovered':0, 
            'lowstart':0,'totaluncover':0, 'totalbases':0}

kmerdict = {}
for kmer in kmerlist: # build kmerdict
    kmerdict [kmer] = {}
    for chrom in fas:  #open file and read line
        chromnum = chrom[3:-3]
        kmerdict [kmer][chromnum] = get_inner_dict()

我决定使用一个函数使它更易于阅读:)。在

相关问题 更多 >