кейсе:
Есть данные в формате .csv с полями asin;brand;id;source;stars;timestamp
Пример типовой записи (далее: «события»): B0014D3N0Q;Downy;R127UBE9RHWTYY;amazon;2;1538600400
Последнее поле - это дата.
В запросе поступает временной промежуток дата «от - до», и аргументы, к примеру stars=4, source=‘amazon’
Нужно вывести кол-во собитий в этом временном промежутке с шагом (неделя, две и т.д.) и которые соответствуют заданным аргументам.
Изначально я решил пересобрать все в дикт, с ключом = дата и значением = тапл с набором аргументов.
Из словаря сформировать отдельно список с отсортированными ключами=датами.
В отсортированом списке ключей=дат искать ИНДЕКС даты начала и ИНДЕКС даты конца, которые поступают с запросом. Далее в цикле от индекса начала до индекса конца забираю из этого списка даты=значения.
После этого я могу забрать из словаря данные по ключам из этого среза.
Делаю все это для того чтоб избегать поиска в цыкле по всем ключам словаря (брать в цикле ключ=дату каждого события и проверять условие входит ли он=дата в заданый в запросе временной промежуток)
Моя проблема в том, что даты начала/конца, которая поступает в запросе может и не быть в списке ключей.
Тогда всеровно прийдеться в цикле проходить по всем ключам с условием, чтоб искомая дата(i) была (i-1) < i < (i+1)
Подскажите можно ли что-то сделать с этим чтоб избежать поиска в цикле? Возможно есть абсолютно другой, более легкий способ это решить?
https://pypi.org/project/sortedcontainers/
Я правильно понял: Проверить есть ли искомая дата в дикте (ключи в дикте хешируються и я получу ответ за константное время), ели нет: Сортировать список с датами с помощью sortedcontainers. Дальше сделать рекурсивную ф-цию, на вход она принимает индекс начального елемента, индекс конечного элемента, и искомую дату. В ф-ции я беру значение под индексом среднего элемента в срезе, и сравниваю его с искомой датой (в зависисости от того больше она или меньше - вызываю рекурсивно эту же функцию, и передаю новый срез. Выход из рекурсии, когда в срезе нет элементов, и возвращаю крайний слева(или справа в зависимоти от того ищю я дату начала или дату конца) К встроенному методу сортировки в пайтон у меня вопросов нет. Цсв файл у меня не меняеться, я хочу ускорить скорость обработки запроса.
Обсуждают сегодня