(我在python上不太好,如果这是一个愚蠢的问题,请原谅我)
所以我想创建一个代表这个的数据结构 -
word1 word2
word3 1 2
word4 3 4
现在我尝试过这样的事情 -
self.table = [][]
但是这给了我一个无效的语法错误(我猜是因为我没有初始化数组?)。但是,即使我使用它,我也无法使用它,因为我不知道我的x和y维度有多大(似乎会有一个索引异常的数组)。
我应该使用双字典吗?我该怎么用?
答案 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
之类的内容。
答案 1 :(得分:0)
也许您可以尝试使用
初始化您的表格self.table = {r : { c : 0 for c in ['word1', 'word2']} for r in ['word3', 'word4']}
然后您可以通过
访问每个职位self.table['word3']['word1'] = 2
答案 2 :(得分:0)
Python没有现成的指令来创建二维矩阵,但使用列表推导很容易做到:
matrix = [[0] * cols for i in range(rows)]
然后您可以使用例如
访问矩阵matrix[row][col] += 42
假设rows=10
和cols=20
,则row
索引必须从0到9,col
索引从0到19.您还可以使用负索引来表示从最后算起;例如
matrix[-1][-1] = 99
将最后一个单元格设置为99
答案 3 :(得分:0)
如果您不反对使用外部库,可以查看