Я ищу страну по диапазону ip для десятков миллионов строк. Я ищу более быстрый способ поиска.
У меня есть 180K кортежей в этой форме:
>>> data = ((0, 16777215, 'ZZ'),
... (1000013824, 1000079359, 'CN'),
... (1000079360, 1000210431, 'JP'),
... (1000210432, 1000341503, 'JP'),
... (1000341504, 1000603647, 'IN'))
(целые числа - это IP-адреса, преобразованные в простые числа.)
Это делает работу правильно, но это занимает слишком много времени:
>>> ip_to_lookup = 999
>>> country_result = [country
... for (from, to, country) in data
... if (ip_to_lookup >= from) and
... (ip_to_lookup <= to)][0]
>>> print country_result
ZZ
Может ли кто-нибудь указать мне правильное направление для более быстрого способа поиска? Используя описанный выше метод, 100 поисков занимают 3 секунды. Я имею в виду, что на 10 миллионов строк уйдет несколько дней.