Python字典是非常非常快的,並使用一個整數的元組是不會成爲一個問題。然而,你的用例似乎有時你需要做一個單一的座標檢查,並且遍歷所有的字典當然很慢。
而不是做一個線性搜索,你可以但加快存取的數據結構則需要使用三點字典:
class Grid(object):
def __init__(self):
self.data = {} # (i, j) -> data
self.cols = {} # i -> set of j
self.rows = {} # j -> set of i
def __getitem__(self, ij):
return self.data[ij]
def __setitem__(self, ij, value):
i, j = ij
self.data[ij] = value
try:
self.cols[i].add(j)
except KeyError:
self.cols[i] = set([j])
try:
self.rows[j].add(i)
except KeyError:
self.rows[j] = add([i])
def getRow(self, i):
return [(i, j, data[(i, j)])
for j in self.cols.get(i, [])]
def getCol(self, j):
return [(i, j, data[(i, j)])
for i in self.rows.get(j, [])]
注意,有這取決於很多其他可能的數據結構正是你正在嘗試要做什麼,閱讀的頻率如何,更新頻率如何,如果通過矩形查詢,是否查找最近的非空單元格等等。
'dict'對於密鑰的元組中的否定鍵或負數沒有問題。你擔心什麼樣的訪問模式表現不佳? – tkerwin 2011-03-11 20:09:22
這不是我擔心的負面問題;我從前面的問題被告知'一般字典並沒有爲此優化,如果您需要提高效率,您應該重新構建數據,以便您不需要這樣做。 ' – 2011-03-11 20:11:47
我不認爲你的問題與你鏈接點的問題有關,除非你想訪問例如所有第一個索引元素都是特定值的項目。 「一般情況下,使用字典中需要定期查詢/訪問的數據並不好」實際上,字典訪問通常是不變的。 – Philipp 2011-03-11 20:15:10