创建按字符串索引的python 2d数组

创建按字符串索引的python 2d数组,python,arrays,Python,Arrays,(我对python不是很在行,所以如果这是一个愚蠢的问题,请原谅我) 所以我想创建一个数据结构来表示这一点- word1 word2 word3 1 2 word4 3 4 现在我试着做这样的事情- self.table = [][] 但是这给了我一个无效的语法错误(我想是因为我还没有初始化数组?)。然而,即使我使用这个,我也不能使用它,因为我不知道我的x和y维度有多大(看起来好像会有一个索引外的数组异常) 我应该用双字典吗?我应该用什么 想法是创

(我对python不是很在行,所以如果这是一个愚蠢的问题,请原谅我)

所以我想创建一个数据结构来表示这一点-

      word1   word2
word3   1      2
word4   3      4
现在我试着做这样的事情-

self.table = [][]
但是这给了我一个无效的语法错误(我想是因为我还没有初始化数组?)。然而,即使我使用这个,我也不能使用它,因为我不知道我的x和y维度有多大(看起来好像会有一个索引外的数组异常)


我应该用双字典吗?我应该用什么

想法是创建一个字典,将字符串映射到索引。在下面的示例中,有一个小类重载了“[]”运算符:

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的内容

也许您可以尝试使用初始化表

self.table = {r : { c : 0 for c in ['word1', 'word2']} for r in ['word3', 'word4']}
然后你可以通过

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

Python没有现成的指令来创建二维矩阵,但使用列表理解很容易做到:

matrix = [[0] * cols for i in range(rows)]
然后您可以访问矩阵,例如

matrix[row][col] += 42
matrix[-1][-1] = 99
假设
rows=10
cols=20
,则
row
索引必须从0变为9,而
col
索引必须从0变为19。您也可以使用负索引来表示从末尾开始计数;比如说

matrix[row][col] += 42
matrix[-1][-1] = 99

将最后一个单元格设置为99如果您不反对使用外部库,您可以签出


self.table=[],[]]
您可以使用一个由两个字符串组成的dict和tuple作为键。如果我想以编程方式执行此操作,该怎么办?等等,我也不能像dd[“word1”][“word2”]这样查找关联的值-有什么方法可以做到吗?@praks5432
dd[“word1”][“word2”]
将字典嵌套在一起-这与通过字符串索引2D矩阵数组不同。还将答案更新为允许使用
dd[“word1”][“word2”]