我遇到一个问题,我正在编辑字典中某个键的值,然后我想将这些字典存储为元组的条目。但是问题在于元组似乎正在通过引用添加字典。
此处提供了示例代码:
import numpy as np
if __name__ == "__main__":
dict_decision = {'policy': 'decision-rule',
'file': 'policy', 'nopts': 1, 'vect_td': 10}
lifetime = 40; # years
vect_td = np.arange(1,lifetime)
tup_dict = ()
count = 0
for td in vect_td:
dict_decision.update({'vect_td':int(td)})
#print(dict_decision)
tup_dict = tup_dict + (dict_decision,)
count = count + 1
在for循环的末尾,字典dict_decision
的键为vect_td
= 39
。当我检查tup_dict时,存储在其中的所有字典实际上都是vect_td
= 39
,我希望它们在1到39之间变化。它似乎已通过引用传递了字典dict_decision
。我该怎么办才能纠正这种情况?
答案 0 :(得分:1)
之所以会发生这种情况,是因为调用dict_decision.update(...)
时,您会在循环的每次迭代中更新相同的dict实例。这意味着您的元组确实确实包含许多对同一字典的引用。
如果在调用update
之前复制原始字典,则可能会更好:
for td in vect_td:
td_dict = dict_decision.copy()
td_dict.update({'vect_td': int(td)})
tup_dict = tup_dict + (td_dict,)
count = count + 1
正如对问题的评论中所建议的那样,您可能还需要一个列表而不是一个元组,这样就不必为每次循环迭代创建新的元组,但这与您的问题并不严格相关