Encontrar grupos de números en una lista

Estoy luchando con eso, ya que estoy seguro de que una docena de bucles no es la solución para este problema:

Hay una lista ordenada de números como

numbers = [123, 124, 128, 160, 167, 213, 215, 230, 245, 255, 257, 400, 401, 402, 430]

y quiero crear un dictado con listas de números, en donde la diferencia de los números (que se siguen) no sea mayor que 15. Por lo tanto, la salida sería esta:

clusters = {
    1 : [123, 124, 128],
    2 : [160, 167],
    3 : [213, 215, 230, 245, 255, 257],
    4 : [400, 401, 402],
    5 : [430]
}

Mi solución actual es un poco fea (tengo que eliminar los duplicados al final ...), estoy seguro de que se puede hacer de forma pitónica.

Esto es lo que hago ahora:

clusters = {}  
dIndex = 0 
for i in range(len(numbers)-1) :
    if numbers[i+1] - numbers[i] <= 15 :
        if not clusters.has_key(dIndex) : clusters[dIndex] = []
        clusters[dIndex].append(numbers[i])
        clusters[dIndex].append(numbers[i+1])
    else : dIndex += 1

Respuestas a la pregunta(5)

Su respuesta a la pregunta