python - 将元素分配给字典列表中的一个数组

标签 python dictionary numpy-ndarray

我有一个字典列表。每个字典都包含一个 np.array 作为与键关联的值之一。我试图更改列表中仅一个字典的特定数组中的值,并发现列表中的每个字典都发生了更改。

tmp_array = np.array([[1,2],[3,4]])
BF = [{ 'temp':78, 'nums':tmp_array},{'tmp':61,'nums':temp_array}]
BF[0]['nums'][0,0] = 44

这会重新分配列表 BF 中的每个字典并返回

[{'temp': 78, 'nums': array([[44,  2],[ 3,  4]])},
 {'temp': 61, 'nums': array([[44,  2],[ 3,  4]])}]

我原以为只更改第一本词典,但列表 (BF) 中的所有词典都已更改。

有没有一种方法可以只更改其中一个字典的值? (我知道我可以为字典分配一个新值,但如果值是一个数组,它似乎不起作用)

最佳答案

NumPy 数组是可变对象,并且您在不同的字典中使用相同的对象。因为它是同一个对象,所以在任何地方改变它都会改变它。

一个解决方法是为每个新词典制作一个副本:

tmp_array = np.array([[1,2],[3,4]])
BF = [{ 'temp':78, 'nums':tmp_array.copy()},{'tmp':61,'nums':tmp_array.copy()}]
BF[0]['nums'][0,0] = 44

关于python - 将元素分配给字典列表中的一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55552327/

相关文章:

python - 为什么 numpy 从相同的随机状态返回不同的随机数?

c# - 两个数组合并成一个字典

numpy - 是否有类似 np.linspace 的 3D 线?

python - 将 dataframe 转换为字典,但不将列名作为 python 中的键

python - 更好的方法来统一打乱两个 numpy 数组

python - 如何从 mnist 数据的原始大小创建样本子集,同时保留所有 10 个类

python - tensorflow 张量板错误: you must feed a value for placeholder tensor

python - Bash:按字节区分大小写的排序命令或使用 python 排序命令对文本文件进行排序

python - 在 Python 中,是否可以在一个表达式中将列表拆分为第一个、内部和最后一个元素?

python - 如何在字典中找到树的第一个节点?