Смотри, это просто линейный поиск. Было бы неплохо, если бы вы могли выполнять поиск, который лучше масштабируется, но ваши сложные требования к соответствию не позволяют мне понять, возможно ли, скажем, сохранить его сортировку и использовать бинарный поиск.
Сказав это, возможно, одна из возможностей - это сгенерировать несколько индексов. Основным индексом может быть словарь с ключом для свойства a
, связывающий его со списком элементов с одинаковым значением для этого свойства. Если предположить, что значения этого свойства хорошо распределены, это немедленно исключит подавляющее большинство сравнений.
Если свойство имеет ограниченное количество значений, то вы можете рассмотреть возможность добавления дополнительного индекса, который сортирует элементы по b
, а может быть даже другого, который сортирует по c
(но в обратном порядке).