2014-02-23 55 views
1

(我不是在蟒蛇太大,所以請原諒我,如果這是一個愚蠢的問題)創建蟒蛇二維數組由字符串

所以我想創建一個表示這個數據結構索引 -

 word1 word2 
word3 1  2 
word4 3  4 

現在我試着做這樣的事情 -

self.table = [][] 

但是這是給我一個無效的語法錯誤(我猜是因爲我還沒有初始化數組?)。但是,即使我要使用它,我也無法使用它,因爲我不知道我的x和y維度有多大(似乎會有一個數組超出索引異常)。

我應該使用雙字典嗎?我應該使用什麼?

+0

'self.table = [[ ],[]]' – hjpotter92

+0

你也許可以使用兩個字符串的字典和元組作爲鍵。 –

回答

0

這個想法是創建一個字典,它將字符串映射到indeces。在下面有一個小類重載「[]」 - 運營商:

class ArrayStrIdx: 
    """ 2D Array with string as Indeces 

    Usage Example:: 

     AA = ArrayStrIdx() 
     AA["word1", "word3"] = 99 
     print(AA["word2", "word5"]) 
    """ 

    cols ="word1 word2" 
    rows ="word3 word4 word5" 

    dd = [[10,11,12],[20,21,22]] # data 

    def __init__(self): 
     """ Constructor builds dicts for indexes""" 
     self.ri = dict([(w,i) for i,w in enumerate(self.rows.split())]) 
     self.ci = dict([(w,i) for i,w in enumerate(self.cols.split())]) 

    def _parsekey(self, key): 
     """ Convert index key to indeces for ``self.dd`` """ 
     w0, w1 = key[0], key[1] 
     return self.ci[w0], self.ri[w1] 

    def __getitem__(self, key): 
     """ overload [] operator - get() method""" 
     i0, i1 = self._parsekey(key) 
     return self.dd[i0][i1] 

    def __setitem__(self, key, value): 
     """ overload [] operator - set() method """ 
     i0, i1 = self._parsekey(key) 
     self.dd[i0][i1] = value 

更新:擴展答案,讓像AA["word1", "word3"] = 23

+0

如果我想以編程方式執行此操作,該怎麼辦? – praks5432

+0

等待,我也不能做像dd [「word1」] [「word2」]來找到相關的值 - 有沒有一種方法可以做到這一點? – praks5432

+0

@ praks5432'dd [「word1」] [「word2」]''將會嵌套到字典中 - 這與通過字符串索引2D矩陣數組並不完全相同。還更新了答案,以允許'dd [「word1」] [「word2」]'' – Dietrich

0

也許你可以嘗試用

self.table = {r : { c : 0 for c in ['word1', 'word2']} for r in ['word3', 'word4']} 

初始化你的表,那麼你可以通過

self.table['word3']['word1'] = 2 
0

的Python訪問的每個位置沒有現成的指令來創建一個兩維矩陣,但很容易做到這一點使用列表解析:

matrix = [[0] * cols for i in range(rows)] 

然後你可以訪問墊RIX與例如

matrix[row][col] += 42 

假設rows=10cols=20然後row索引必須從0到9和從0 col指數〜19也可以使用負的索引來表示從末端計數;例如

matrix[-1][-1] = 99 

將設置爲99