使用copy()

时间:2016-05-18 18:15:58

标签: python dictionary

我正在尝试阅读测序数据并对包含的突变进行分类。我认为我遇到的问题是没有正确地声明每个嵌套字典,因此它们是唯一的。

这就是我创建数据结构的方式:

baseDict = {'A':0, 'T':0, 'G':0, 'C':0}
varDict = {'A':baseDict.copy(), 'T':baseDict.copy(), 'G':baseDict.copy(), 'C':baseDict.copy()}
fullDict = {'oncoSites':varDict.copy(), 'oncoGenes':varDict.copy(), 'TIIIRegions':varDict.copy()}

然后我正在添加我读过的任何特定的突变:

fullDict['oncoSites'][j][k] += 1

问题在于,当我添加一个变异时,它被添加到多个词典中。例如,如果我在T中找到C的参考库和oncoSites的{​​{1}}变体,请将其添加为:

fullDict['oncoSites'][T][C] += 1

我得到的输出是:

{'TIIIRegions': {'A': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
                 'C': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
                 'G': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
                 'T': {'A': 0, 'C': 1, 'G': 0, 'T': 0}},
 'oncoGenes': {'A': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
               'C': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
               'G': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
               'T': {'A': 0, 'C': 1, 'G': 0, 'T': 0}},
 'oncoSites': {'A': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
               'C': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
               'G': {'A': 0, 'C': 0, 'G': 0, 'T': 0},
               'T': {'A': 0, 'C': 1, 'G': 0, 'T': 0}}}

如何只增加一个字典?

1 个答案:

答案 0 :(得分:2)

您需要deepcopy

使用:

{'oncoSites':deepcopy(varDict), 'oncoGenes':deepcopy(varDict), 'TIIIRegions':deepcopy(varDict)}

发生的事情是:当您执行varDict.copy(..)时,您正在复制baseDict

副本的引用