2015-11-08 69 views
0

我使用列表理解來創建一個嵌套的字典,使得在網格中的每個單元都有它被稱爲stocklist字典的自己的副本...從嵌套deep.copy字典Retreiving數據通過列表理解Python中取得

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)] 

所以這是我必須遍歷每行和每列的代碼,並比較內容與stocklists的電網匹配的密鑰內容的keygrid,並添加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 

上面的最後一行是當然的純假,真不知道語法應該如何看,雖然,我需要的[行] [COL]位來告訴電腦我處理的哪個單元stockgrid與 - 但後來我怎麼告訴它+1值的匹配鍵?希望這是有道理的。此外,它可能需要有「keygrid」還包含值的字典或列表中的每個細胞,使多個鍵可以在stockgrid字典對應的小區進行匹配,頭腦博格爾斯在這句法什麼將會!任何建議真的很感激。

回答

1

我suposse是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 
+0

是啊,你的解釋是正確的,而在stockgrid每個單元字典的副本將是所有其他在網格這個循環後拷貝(當然,這取決於那些已匹配和+1)不同。我會嘗試你的解決方案,實際上期待着它。非常感謝。 – SamChancer

+0

@SamChancer完美的!我還增加的情況下的答案時,你有內部keygrid鍵列表。我希望它能像你想要的那樣工作。 –