170 похожих чатов

Всем привет! Подскажите в какую структуру лучше организовать данные при таком

кейсе:

Есть данные в формате .csv с полями asin;brand;id;source;stars;timestamp
Пример типовой записи (далее: «события»): B0014D3N0Q;Downy;R127UBE9RHWTYY;amazon;2;1538600400

Последнее поле - это дата.
В запросе поступает временной промежуток дата «от - до», и аргументы, к примеру stars=4, source=‘amazon’
Нужно вывести кол-во собитий в этом временном промежутке с шагом (неделя, две и т.д.) и которые соответствуют заданным аргументам.

Изначально я решил пересобрать все в дикт, с ключом = дата и значением = тапл с набором аргументов.
Из словаря сформировать отдельно список с отсортированными ключами=датами.
В отсортированом списке ключей=дат искать ИНДЕКС даты начала и ИНДЕКС даты конца, которые поступают с запросом. Далее в цикле от индекса начала до индекса конца забираю из этого списка даты=значения.
После этого я могу забрать из словаря данные по ключам из этого среза.
Делаю все это для того чтоб избегать поиска в цыкле по всем ключам словаря (брать в цикле ключ=дату каждого события и проверять условие входит ли он=дата в заданый в запросе временной промежуток)

Моя проблема в том, что даты начала/конца, которая поступает в запросе может и не быть в списке ключей.
Тогда всеровно прийдеться в цикле проходить по всем ключам с условием, чтоб искомая дата(i) была (i-1) < i < (i+1)
Подскажите можно ли что-то сделать с этим чтоб избежать поиска в цикле? Возможно есть абсолютно другой, более легкий способ это решить?

2 ответов

16 просмотров

https://pypi.org/project/sortedcontainers/

Alex-Fila Автор вопроса
Tishka17
https://pypi.org/project/sortedcontainers/

Я правильно понял: Проверить есть ли искомая дата в дикте (ключи в дикте хешируються и я получу ответ за константное время), ели нет: Сортировать список с датами с помощью sortedcontainers. Дальше сделать рекурсивную ф-цию, на вход она принимает индекс начального елемента, индекс конечного элемента, и искомую дату. В ф-ции я беру значение под индексом среднего элемента в срезе, и сравниваю его с искомой датой (в зависисости от того больше она или меньше - вызываю рекурсивно эту же функцию, и передаю новый срез. Выход из рекурсии, когда в срезе нет элементов, и возвращаю крайний слева(или справа в зависимоти от того ищю я дату начала или дату конца) К встроенному методу сортировки в пайтон у меня вопросов нет. Цсв файл у меня не меняеться, я хочу ускорить скорость обработки запроса.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта