2014-02-23 57 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