从Python中的列表解析所做的嵌套的deep.copy字典中重新获取数据

时间:2015-11-08 15:35:23

标签: python dictionary list-comprehension

我正在使用列表理解来创建嵌套字典,以便网格中的每个单元格都有自己的字典副本称为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中的哪个单元 - 但是,如何告诉它+1匹配键的值?希望有道理。此外,可能有必要让“keygrid”还包含每个单元格中的字典或值列表,以便可以在stockgrid字典的相应单元格中匹配多个键,令人难以置信的是将会!任何建议真的很感激。

1 个答案:

答案 0 :(得分:1)

我认为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