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 ответов

9 просмотров

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

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

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

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

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

Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
77
А дин типизация это хорошо или плохо?
Alexey
12
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Исходники плюс документация? Вы гоните)) демок хватит всем
zamtmn
11
Карта сайта