uplas Python como chaves lenta

Estou tentando implementar uma pesquisa rápida para tuplas classificadas em um dicionário; algo que responde à pergunta "A tupla (3,8) tem um valor associado e, se sim, qual é?". Permita que os números inteiros nas tuplas sejam vinculados de baixo por 0 e de cima por max_int.

Fui em frente e usei o ditado de Python, mas achei que era bem lento. Outra abordagem para esse problema seria criar uma lista T com max_int (principalmente vazios) dictos e, para cada tupla (3,8), colocar T [3] [8] = value. Eu acho que essa é exatamente a abordagem de hash de balde que o Python adota com os dictos, mas o último é cerca de 30 vezes (!) Mais rápido aqu

Além disso, é feio (especialmente porque agora estou prestes a implementar três tuplas), então eu aprecio muito algumas dicas aqu

Para referência, aqui está o código que eu usei para obter os horários:

import numpy as np
import time

# create a bunch of sorted tuples
num_tuples = 10
max_int = 100
a = np.random.rand(num_tuples,2) * max_int
a = a.astype(int)
for k in xrange(len(a)):
    a[k] = np.sort(a[k])

# create dictionary with tuples as keys
d = {}
for t in a:
    d[tuple(t)] = 42

print d

# do some lookups
m = 100000
start_time = time.time()
for k in xrange(m):
    (3,8) in d.keys()
elapsed = time.time() - start_time
print elapsed

# now create the bucket-list structure mentioned above
t = [{} for k in xrange(max_int)]
for k in xrange(len(a)):
    t[a[k][0]][a[k][1]] = 42

print t

# do some lookups
m = 10000
start_time = time.time()
for k in xrange(m):
    8 in t[3].keys()
elapsed = time.time() - start_time
print elapsed

questionAnswers(6)

yourAnswerToTheQuestion