我想更改 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}]]
我必须在代码中更改哪些内容才能获得此输出?
最佳答案
Multiplying n 的列表只是重复其内容 n 次。因此,这个
[{"value": 1}]*5
将创建一个新列表,其中包含对同一字典的 5 个引用{"value": 1}
。由于所有列表项都引用同一对象,因此更新其中任何一项都会影响其他项。
相反,使用列表推导式来创建不同的对象:
matrix = [[{"value": 1} for _ in range(5)] for _ in range(5)]
matrix[0][0]["value"] = 4
print(matrix)
关于python - 更改字典矩阵中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52683430/