Достаточно просто преобразовать «непрерывное» количество в грубую «метку». Обычная идея - разделить диапазон на интервалы; затем используйте вариант бинарный поиск , чтобы определить интервал, содержащий значение запроса. Сохраните индекс наибольшего значения, которое, как известно, не больше, чем входное значение, и наименьшего значения, которое, как известно, больше. Обратите внимание, что вы можете рассмотреть значения n для разделения n + 1 интервал (два из которых являются полубесконечными); если это подходит для ваших данных, вы должны инициализировать один или оба ограничивающих индекса для индексов за пределами крайних значений.
Вы можете сделать это в качестве шага предварительной обработки непрерывной переменной или сохранить (для каждой подходящей комбинации других переменных) структуру данных, которая содержит границы интервалов параллельно со значениями для используйте для каждого интервала.
Между тем, не создавайте составной ключ, собирая строку, - в конечном итоге вы будете делать глупые вещи, такие как повторный анализ его позже. Вместо этого используйте tuple
(или пользовательский класс). Затем вам нужно предоставить хеш-функцию, но это не сложно (и существует библиотек , чтобы сделать ее тривиальной).