Tabla hash de Python para la coincidencia difusa

Estoy tratando de implementar una estructura de datos que permita búsquedas rápidas basadas en claves.

El dict Python es genial cuando mis búsquedas implican una igualdad
(por ejemplo, key == somevalue traduce en datadict[somevalue] .

El problema es que también necesito poder buscar claves de manera eficiente en base a una comparación más compleja, por ejemplo, key > 50 , o key.startswith('abc') .

Obviamente no puedo usar la misma solución en ambos casos, pero en este momento no puedo encontrar la manera de resolver ninguno de los dos casos. ¿Alguien puede sugerir una forma de hacer esto?

    No parece que quieras un algoritmo hash, en lugar de algún tipo de árbol binario. O incluso una lista con la que usas el módulo bisect . Valdría la pena verlo: la biblioteca estándar de Python : ¿ existe un módulo para el árbol binario equilibrado?

    Otra opción (según sus datos), sería usar una base de datos sqlite3 en memoria y crear índices apropiados para posibles búsquedas, pero cambiará el rendimiento / memoria y la syntax SQL para mayor flexibilidad …

    • Ponga todos los elementos de datos en una lista.
    • Ordenar la lista en la clave.
    • Use la búsqueda binaria para encontrar de manera eficiente los elementos donde key > 50 o donde key.startswith('abc') .

    Por supuesto, esto solo vale la pena si tiene realmente muchos elementos de datos. Si no tiene tantos, simplemente recorra la lista y aplique su condición a cada clave.