首页 > 解决方案 > 更改字典矩阵中的特定值

问题描述

我想更改 5x5 字典矩阵中的特定值,这是我的代码:

matrix = [[{"value": 1}]*5]*5

matrix[0][0]["value"] = 4

print(matrix) 

它不会更改一个值,而是更改所有值:

[[{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}], [{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}], [{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}], [{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}], [{'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}, {'value': 4}]]

代码不应该只更改一个值,如下所示:

[[{'value': 4}, {'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}], [{'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}], [{'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}], [{'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}], [{'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}, {'value': 1}]]

我必须在代码中进行哪些更改才能获得此输出?

标签: python

解决方案


将列表乘以n 只是将其内容重复 n 次。因此,这

[{"value": 1}]*5

将创建一个新列表,其中包含对同一 dict 的 5 个引用{"value": 1}。由于所有列表项都引用同一个对象,因此更新其中任何一项都会影响其他项。

相反,使用列表推导来创建不同的对象:

matrix = [[{"value": 1} for _ in range(5)] for _ in range(5)]
matrix[0][0]["value"] = 4
print(matrix)

推荐阅读