更改字典矩阵中的特定值

时间:2018-10-06 21:20:10

标签: python

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

optimization: {    runtimeChunk: 'single',    splitChunks: {
     chunks: 'all',
     maxInitialRequests: infinity,
     cacheGroups: {
       vendor: {
         test: /[\\/]node_modules[\\/]/,
         vendorname(v) {
           var name = v.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
           return `npm.${name.replace('@', '_')}`;
         },
       },
     },

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

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}]]

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

1 个答案:

答案 0 :(得分:1)

Multiplying由n组成的列表仅将其内容重复n次。因此,

[{"value": 1}]*5

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

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

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