«Мы можем гарантировать, что либо ключ, либо значение (или оба) будут целыми числами»
Это странно написано - «ключ или значение (или оба)» не кажется правильным. Либо они все целые, либо не все целые.
Звучит так, будто все они целые.
Или, похоже, вы думаете о замене целевого объекта целочисленным значением, поэтому у вас есть только одна копия, на которую ссылается целое число. Это ложная экономика. Просто держите целевой объект. Все объекты Python - по сути - ссылки. Очень мало фактического копирования сделано.
Давайте представим, что у вас просто есть два целых числа и вы можете выполнить поиск по любой из пары. Один из способов сделать это - использовать очереди кучи или модуль bisect для поддержки упорядоченных списков целочисленных кортежей ключ-значение.
См. http://docs.python.org/library/heapq.html#module-heapq
См. http://docs.python.org/library/bisect.html#module-bisect
У вас есть одна куча (key,value)
кортежей. Или, если ваш базовый объект является более сложным, (key,object
) кортежи.
У вас есть еще один набор heapq (value,key)
. Или, если ваш базовый объект более сложный, (otherkey,object)
кортежи.
«Вставка» становится двумя вставками, по одному в каждый список со структурой heapq.
Поиск ключа находится в одной очереди; поиск значения находится в другой очереди. Выполните поиск, используя bisect(list,item)
.