我试图从一个字符列表中计算出很多不同的变量,并将它们放入嵌套字典中。但是,由于特定的任务,彼此相邻的词典在它们内部都具有相同的键,如dataDict中所示。 我正在尝试计算具有特定值的事物,因此,每当我尝试将1添加到某个键的值时,所有在字典中具有该键的项都将1添加到它们的值,而不仅仅是我想添加的一项1到。我想知道是否有办法阻止这种情况的发生,或者是否有更好的方法来做我想做的事情。 键必须相同,因为整个字典的一般形状是:
for chunk in map(dict, zip(*[iter(x.items())] * 10)):
print(chunk)
下面的代码旨在显示正在发生的事情,实际上访问dataDict的所有键都是变量,但它们都可以正常工作。
我已经研究过使用计数器,但是据我所知,我遇到了同样的问题。
{'a':{1:{'a':0, 'b':0, 'c':0 , ...}, 2 :{'a':0, ...}, ...}, 'b':{...}}
预期:
dataDict = {'G':{1:{'a':0}, 2:{'a':0}, 3:{'a':0}}, 'L':{1:{'a':0}, 2:{'a':0}, 3:{'a':0}}}
characters = ["l", "i", "s", "t", " ", "o", "f", " ", "c", "h", "a", "r", "a", "c", "t", "e", "r", "s"]
for i in string:
if tweet.index(i) > 2:
dataDict['G'][1]['a'] += 1
实际:
dataDict = {'G':{1:{'a':15}, 2:{'a':0}, 3:{'a':0}}, 'L':{1:{'a':0}, 2:{'a':0}, 3:{'a':0}}}
制作dataDict的代码是:
dataDict = {'G':{1:{'a':15}, 2:{'a':15}, 3:{'a':15}, 'L':{1:{'a':15}, 2:{'a':15}, 3:{'a':15}}}
答案 0 :(得分:2)
字典是Python中的引用类型。这取决于您如何在这里形成dataDict
。我认为您在许多地方使用/分配了相同的变量,而所有这些都指向相同的内存位置。
因此更新其中任何一个就像反映其他人的价值观。
为快速理解,请查看以下在Terminal上执行的3个代码段。
问题
>>> d = {"a": 0}
>>>
>>> data = {1: d, 2: d, 3: d}
>>>
>>> data
{1: {'a': 0}, 2: {'a': 0}, 3: {'a': 0}}
>>>
>>> data[1]['a'] += 1
>>>
>>> data
{1: {'a': 1}, 2: {'a': 1}, 3: {'a': 1}}
>>>
解决方案1
>>> # 1st way
...
>>> data = {1: {**d}, 2: {**d}, 3: {**d}}
>>> data
{1: {'a': 1}, 2: {'a': 1}, 3: {'a': 1}}
>>>
>>> data[1]['a'] += 1
>>>
>>> data
{1: {'a': 2}, 2: {'a': 1}, 3: {'a': 1}}
>>>
>>>
解决方案2(使用深度复制)
>>> # 2nd way
...
>>> from copy import deepcopy
>>>
>>> d
{'a': 1}
>>>
>>> data = {1: deepcopy(d), 2: deepcopy(d), 3: deepcopy(d)}
>>> data
{1: {'a': 1}, 2: {'a': 1}, 3: {'a': 1}}
>>>
>>> data[1]['a'] += 1
>>> data
{1: {'a': 2}, 2: {'a': 1}, 3: {'a': 1}}
>>>