python - 使用列表理解在 Python 中设置唯一字典列表

标签 python dictionary list-comprehension nested-lists

我有以下字典

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/

相关文章:

c# - 以类为键的字典

python - 抽认卡抛硬币词典

具有可变深度的 Python 嵌套列表推导式

python - 来自 Python 调试器的列表理解范围错误

python - 通过索引中的部分字符串匹配选择行

python - python中的多服务器监视器/自动重启器

python - 将包含列表的字典的值替换为列表的其他项目

python - 将文件中的句子转换为列表中的单词标记

javascript - 如何得到N个和等于M的随机整数

订阅 react 源的 Python Web 服务在对象中产生奇怪的行为