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



我正在使用列表理解来创建一个嵌套字典,这样网格中的每个单元格都有自己的字典副本,称为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中的内容与stocklist网格中匹配关键字的内容进行比较,如果匹配,则添加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中的哪个单元格,但我该如何告诉它+1匹配键的值?希望这是有道理的。此外,可能有必要让"keygrid"在每个单元格中也包含一个字典或值列表,以便在stockgrid字典的相应单元格中可以匹配多个键,这将是令人难以置信的语法!非常感谢任何建议。

我怀疑keygrid是某种矩阵,其中每个元素都是字典的键,你正在复制它,对吗?然后在stockgrid[row][col] == keygrid[row][col]中,您要做的是查看keygrid的键是否在stockgrid中,如果为true,则将该键值加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

最新更新