我有一个看起来像这样的Python代码:
import random
import copy
symbols = set('ABC')
values = dict.fromkeys(symbols, [])
for i in range(5):
value = random.randint(1, 100)
if value % 3 == 0:
values['A'].append(copy.deepcopy(value))
elif value % 3 == 1:
values['B'].append(copy.deepcopy(value))
else:
values['C'].append(copy.deepcopy(value))
print(values)
> {'B': [19, 31, 73, 9, 9], 'A': [19, 31, 73, 9, 9], 'C': [19, 31, 73, 9, 9]}
我希望字典的每个属性将具有不同的元素列表,但是我得到的最终结果是所有这些元素都具有相同的数字(如上所示)。尽管我使用deepcopy
复制元素,为什么会发生这种情况?我该如何解决这个问题?
答案 0 :(得分:2)
您可以使用defaultdict
来获得所需的结果。
from collections import defaultdict
import random
values = defaultdict(list)
for i in range(5):
value = random.randint(1, 100)
if value % 3 == 0:
values['A'].append(value)
elif value % 3 == 1:
values['B'].append(value)
else:
values['C'].append(value)
print(values)
您无需复制value
defaultdict(list)
会在每次首次访问字典中的键时创建一个新列表-因此您将在字典中拥有3个不同的对象作为值。