Как обновить время для всех данных, полученных в Python - PullRequest
0 голосов
/ 16 ноября 2018

Я новичок в Python и пишу скрипт, чтобы сэкономить время для данных, полученных из алгоритма

В скрипте у меня есть алгоритм, который принимает несколько параметров и возвращает идентификатор данных, которые онобнаружено.Ниже приведены несколько его выходных данных:

S.No    Data Id         Time
1       0               2018-11-16 15:00:00
2       0, 1            2018-11-16 15:00:02
3       0, 1            2018-11-16 15:00:03
4       0, 1, 2         2018-11-16 15:00:05
5       0, 1, 2         2018-11-16 15:00:06
6       0, 2            2018-11-16 15:00:08

Из вышеприведенного вывода видно, что с 1-й попытки он обнаружил данные с идентификатором 0.Во 2-й попытке он обнаружил данные с идентификатором 1, поэтому общий идентификатор данных обнаружил 0, 1.В 4-й попытке он обнаружил 2 id.Это продолжается, пока работает в while True.Сверху можно сказать, что период времени для 0 id равен 8 sec, для 1 период времени равен 4 sec, а для 2 это 3 sec.Мне нужно рассчитать эти периоды времени.Для этого я написал следующий код:

data_dict = {}       # To store value of time for each data id
data_dict_sec = {}   # To store value of seconds for each data id

data = amc_data_retention()   # data contains the data id

for dataID in data.items():
    if run_once:
        run_once = False
        data_dict[dataID] = time.time()
        data_dict_sec[dataID] = 0     


for dataID in data.items():
    if dataID in data_dict:
        sec = time.time() - data_dict[dataID]
        data_dict_sec[dataID] += sec
        data_dict[dataID] = time.time()

    else:
        print("New data detected")

Первый цикл for запускается один раз и сохраняет значение времени dataID в dict.В следующем цикле for это время вычитается из текущего времени, а общее количество секунд сохраняется в data_dict_sec.В первой итерации общее количество секунд будет равно 0, но со следующей итерации начнется сохранение правильных секунд.Это прекрасно работает, только если есть 1 идентификатор данных.Как только поступают 2-ые данные, они не записывают время для этого.

Может кто-нибудь предложить хороший способ написать это.Основная цель - сохранить значения периода времени для каждого идентификатора данных.Пожалуйста помоги.Спасибо

1 Ответ

0 голосов
/ 16 ноября 2018

Единственный раз, когда это добавляет data_ID ключи к data_dict, это первый запуск. Следует добавить каждый новый data_ID это видит. Я не вижу необходимости в первом цикле for, где он добавляет только ключи data_ID при первом запуске. Он может делать то, что вам нужно, если вы переместили инициализацию ключа словаря во второй цикл for, где он проверяет, находится ли data_ID в data_dict. Если это не так, то инициализируйте его.

Возможно, это будет делать то, что вам нужно:

data_dict = {}       # To store value of time for each data id
data_dict_sec = {}   # To store value of seconds for each data id

data = amc_data_retention()   # data contains the data id

for dataID in data.items():
    if dataID in data_dict:
        sec = time.time() - data_dict[dataID]
        data_dict_sec[dataID] += sec
        data_dict[dataID] = time.time()

    else:
        print("New data detected")
        data_dict[dataID] = time.time()
        data_dict_sec[dataID] = 0  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...