从 Python 中的列表理解生成的嵌套 deep.copy 字典中检索数据

Retreiving data from a nested deep.copy dictionary made by list comprehension in Python

我正在使用列表理解来创建一个嵌套字典,以便网格中的每个单元格都有它自己的字典副本,称为 stocklist...

import copy
stocklist = {'a': 0, 'b': 0, 'c': 0}

stockgrid = [[copy.deepcopy(stocklist) for w in range(WIDTH)] for h in range(HEIGHT)]

现在我将遍历网格的每个元素并在每个单元格的字典中查找项目以与另一个网格(键网格)的相应单元格中的值进行比较...

keygrid = [["key" for w in range(WIDTH)] for h in range(HEIGHT)]

所以这是我必须循环遍历每一行和每一列的代码,并将 keygrid 中的内容与 stocklists 网格中匹配键的内容进行比较,如果匹配则加 1 作为值...

for row in range(HEIGHT):
    for col in range(WIDTH):
        if stockgrid[row][col] == keygrid[row][col]:
           stockgrid value of key in this cells dictionary = value + 1

上面的最后一行当然是纯伪的,虽然我真的不知道语法应该如何,但我需要 [row][col] 位来告诉计算机我正在处理 stockgrid 中的哪个单元格with- 但是我如何告诉它 +1 匹配键的值?希望这是有道理的。此外,可能有必要让 "keygrid" 在每个单元格中还包含一个字典或值列表,以便可以在 stockgrid 字典的相应单元格中匹配多个键,请注意语法是什么那将是!非常感谢任何建议。

我猜想 keygrid 是某种矩阵,其中每个元素都是您正在复制的字典的键,对吗?然后在 stockgrid[row][col] == keygrid[row][col] 中,您要做的是查看 keygrid 的键是否在 stockgrid 中,如果是,则向该键值加 1。

如果这是您要问的问题,答案将是:

for row in range(HEIGHT):
    for col in range(WIDTH):
        if keygrid[row][col] in stockgrid[row][col]:
           stockgrid[row][col][keygrid[row][col]]+=1

如果在 keygrid 中你有一个键列表,你可以这样做:

for row in range(HEIGHT):
    for col in range(WIDTH):
        # Now we select the common keys between the stockgrid and the keygrid
        common_keys=[key for key in keygrid[row][col] if key in stockgrid[row][col]]
        # Add one in the common_keys
        for key in common_keys:
            stockgrid[row][col][key]+=1