gpt4 book ai didi

python - 字典将值赋予某个键,但其他键获得相同的值

转载 作者:行者123 更新时间:2023-12-01 00:08:17 24 4
gpt4 key购买 nike

我想创建一个字典来记录程序运行时的准确性。当我给某个键赋值时出现一些问题

在这里,我创建了一个字典来记录训练或验证时的准确性

acc = dict.fromkeys(['train', 'val'], dict.fromkeys(['pa', 'iou', 'dice'], 0))

原来的字典是这样的

{'train': {'pa': 0, 'iou': 0, 'dice': 0}, 'val': {'pa': 0, 'iou': 0, 'dice': 0}}

现在,我给出一些测试值

acc['train']['pa'] = 0.9
acc['train']['iou'] = 0.8
acc['train']['dice'] = 0.7

问题是键 val 中的所有值都变得相同

{'train': {'pa': 0.9, 'iou': 0.8, 'dice': 0.7}, 'val': {'pa': 0.9, 'iou': 0.8, 'dice': 0.7}}

最佳答案

如果提供的值是可变对象(其值可以修改),例如列表、字典等,则当可变对象被修改时,序列中的每个元素也会更新。这是因为,每个元素都分配了对同一对象的引用(指向内存中的同一对象)。

在您的问题中, dict.fromkeys(['pa', 'iou', 'dice'], 0) 返回一个可变类型的字典,因此每个元素都分配给相同的元素对象。

为了避免此问题,您可以使用字典理解。

from copy import copy
# keys
keys = ['train', 'val']
value = dict.fromkeys(['pa', 'iou', 'dice'], 0 )

acc = { key : copy(value) for key in keys }

print(acc)

# updating the value
acc['train']['pa'] = 2
print(acc)

来源:https://www.programiz.com/python-programming/methods/dictionary/fromkeys

关于python - 字典将值赋予某个键,但其他键获得相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59799183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com