我有以下字典
stocklist = {'a': 0, 'b': 0, 'c': 0}
我想设置一个高度乘宽度的网格,其中网格中的每个单元格都有自己独特的库存列表版本,具有不同的值。这行得通吗?
stockmap = [[stocklist for w in range(WIDTH)] for h in range(HEIGHT)]
我还有其他宽度乘高度的列表,其中每个单元格仅包含一个值,并且它们工作正常。
但在此之前,我尝试通过使用类来解决我的问题,但这是一场噩梦,因为我的实例包含一个始终相同的列表。
我担心如果我开始编写上面的代码,我最终会遇到同样的问题。
最佳答案
在您的示例中,网格的每个“单元格”都将指向同一个字典 - stocklist
。因此,如果您修改一个“单元格”,实际上所有单元格都会发生变化。
如果您需要在每个单元格中存储不同的字典,您应该创建库存列表的深拷贝。
尝试:
import copy
stocklist = {'a': 0, 'b': 0, 'c': 0}
stockmap = [[copy.deepcopy(stocklist) for w in range(WIDTH)] for h in range(HEIGHT)]
在简单的示例中,您的 stocklist
也不包含任何嵌套字典
`stockmap = [[dict(stocklist) for w in range(WIDTH)] for h in range(HEIGHT)]`
会起作用的。但请记住,如果您的 stocklist
类似于 {'a': 0, 'b': {'c': 0}}
,则内部嵌套字典 {'c': 0}
不会被深度复制,每个 'cell' 将共享该字典。
关于python - 使用列表理解在 Python 中设置唯一字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33567034/