python - 更改字典矩阵中的特定值
问题描述
我想更改 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}]]
我必须在代码中进行哪些更改才能获得此输出?
解决方案
将列表乘以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)
推荐阅读
- excel - 通过 vba 挂锁符号
- python - 按列名和行名从python中的巨大csv文件中检索信息的快速方法
- javascript - 对站点 json 进行排序并将所需信息存储到文件中
- laravel - 如何设置列标题以在刀片模板中使用它?
- javascript - 当使用来自 JS 的 Ajax 调用和在 JSP 中发送带有表单的 POST 时,返回“视图”的 Spring 代码的工作方式不同
- java - Java 多线程从内部类引用的局部变量必须是 final 或有效 final
- python - 将标准化从 Pandas 转换为 AWK 以提高性能
- java - 迁移 Playframework 2.4.3 到 2.7.0 中的问题
- windows - 如何从用户上下文执行 Add-LocalGroupMember 脚本包
- django - 即使启用了 xss,也会执行脚本