我是python的初学者,我正在编写脚本以节省从算法接收的数据的时间
在脚本中,我有一个算法,该算法接受少量参数并返回其检测到的数据的ID。以下是其一些输出:
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
从上面的输出中,我们可以看到在第一次尝试时它检测到ID为0
的数据。在第二次尝试中,它检测到ID为1
的数据,因此总数据ID为0, 1
。在第4次尝试中,它检测到2
id。它在while True
中运行时一直保持下去。从上面我们可以说0
id的时间段是8 sec
,1
的时间段是4 sec
,2
的时间段是{{1} }。我需要计算这些时间段。为此,我编写了以下代码:
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
中。在下一个for循环中,该时间与当前时间相减,总秒数保存在dict
中。在第一次迭代中,总秒数将为0,但是从下一次迭代开始,它将开始保存正确的秒数。仅当有1个数据ID时,此方法才能正常工作。一旦第二个数据到来,它就不会记录时间。
任何人都可以提出一种写这篇文章的好方法。主要目标是继续保存每个数据ID的时间段值。请帮忙。谢谢
答案 0 :(得分:2)
第一次将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