Хэш-таблица Python для нечеткого соответствия

Я пытаюсь реализовать структуру данных, которая позволяет быстро искать на основе ключей.

Питон- dict велик, когда мои взгляды связаны с равенством
(например, key == somevalue преобразуется в datadict[somevalue] .

Проблема в том, что мне также нужно иметь возможность эффективно искать ключи на основе более сложного сравнения, например, key > 50 или key.startswith('abc') .

Очевидно, я не могу использовать одно и то же решение в обоих случаях, но на данный момент я не могу понять, как решить любой случай. Может ли кто-нибудь предложить способ сделать это?

Это не похоже на то, что вы хотите хеш-алгоритм, а не какую-то форму бинарного дерева. Или даже список, с которым вы используете модуль bisect . Стоит посмотреть: стандартная библиотека Python – есть ли модуль для сбалансированного двоичного дерева?

Другим вариантом (в зависимости от ваших данных) будет использование базы данных sqlite3 в памяти и создание соответствующих индексов для возможных поисков – но вы будете торговать динамикой производительности / памяти и синтаксиса SQL для гибкости …

  • Поместите все элементы данных в список.
  • Сортировка списка по ключу.
  • Используйте бинарный поиск, чтобы эффективно находить элементы, где key > 50 или где key.startswith('abc') .

Конечно, это только окупается, если у вас действительно очень много элементов данных. Если у вас их не так много, просто пройдите по списку и примените свое условие к каждому ключу.