我试图从列表中获取列表中的日期和数字列表,并从电子表格中拉出,并创建一个字典列表,其中每个条目是开始日期,停止日期和价值。样本数据是这样的:从列表中创建图表数据(带有开始/停止日期)
d = [[datetime.datetime(2016, 11, 1, 0, 0), 50L],
[datetime.datetime(2016, 11, 2, 0, 0), 50L],
[datetime.datetime(2016, 11, 2, 0, 0), 50L],
[datetime.datetime(2016, 11, 2, 0, 0), 23L],
[datetime.datetime(2016, 11, 2, 0, 0), 23L],
[datetime.datetime(2016, 11, 2, 0, 0), 23L],
[datetime.datetime(2016, 11, 7, 0, 0), 23L],
[datetime.datetime(2016, 11, 8, 0, 0), 23L],
[datetime.datetime(2016, 11, 9, 0, 0), 23L],
[datetime.datetime(2016, 11, 9, 0, 0), 23L],
[datetime.datetime(2016, 11, 9, 0, 0), 66L],
[datetime.datetime(2016, 11, 9, 0, 0), 66L],
[datetime.datetime(2016, 11, 13, 0, 0), 50L],
[datetime.datetime(2016, 11, 14, 0, 0), 50L],
[datetime.datetime(2016, 11, 15, 0, 0), 100L],
[datetime.datetime(2016, 11, 16, 0, 0), 100L],
[datetime.datetime(2016, 11, 17, 0, 0), 100L],
[datetime.datetime(2016, 11, 17, 0, 0), 100L],
[datetime.datetime(2016, 11, 17, 0, 0), 100L],
[datetime.datetime(2016, 11, 20, 0, 0), 100L],
[datetime.datetime(2016, 11, 21, 0, 0), 100L],
[datetime.datetime(2016, 11, 21, 0, 0), 100L],
[datetime.datetime(2016, 11, 23, 0, 0), 50L]]
我需要什么(用于日后转换为甘特图)是这样的输出:
{'start': '11/01/2016', 'end': '11/02/2016', 'IP': '50'}
{'start': '11/02/2016', 'end': '11/09/2016', 'IP': '23'}
{'start': '11/09/2016', 'end': '11/09/2016', 'IP': '66'}
{'start': '11/13/2016', 'end': '11/14/2016', 'IP': '50'}
{'start': '11/15/2016', 'end': '11/21/2016', 'IP': '100'}
{'start': '11/23/2016', 'end': '11/24/2016', 'IP': '50'}
我越来越近,但我想不通了解如何包含最后一个值(是的,它们是IP地址,为了便于阅读,在我的测试集中缩短了)。我目前的代码也会混淆最后一个项目的日期。
这里就是我得到:
{'start': '11/01/2016', 'end': '11/02/2016', 'IP': '50'}
{'start': '11/02/2016', 'end': '11/09/2016', 'IP': '23'}
{'start': '11/09/2016', 'end': '11/09/2016', 'IP': '66'}
{'start': '11/14/2016', 'end': '11/14/2016', 'IP': '50'}
{'start': '11/16/2016', 'end': '11/21/2016', 'IP': '100'}
这里是我到目前为止的代码:
df = []
fmtD = '%m/%d/%Y'
dates = []
lastIP = 0
for x in range(len(d)):
ipAdd = d[x][1]
if ipAdd == lastIP or x == 0:
dates.append(d[x][0])
elif ipAdd != lastIP:
df.append(dict(IP = str(lastIP),\
start=min(dates).strftime(fmtD),\
end = max(dates).strftime(fmtD)))
dates = []
elif x == len(d):
df.append(dict(IP = str(lastIP),\
start=min(dates).strftime(fmtD),\
end = max(dates).strftime(fmtD)))
lastIP = ipAdd
for item in df:
print item
你得到什么输出?表明这一点,以便我们能够理解你的期望和你得到的东西! –
谢谢。添加了当前输出。 – bgrundy