dictionary
由lat和long信息组成,带有时间键,范围从00:00到23:59。
并非所有数据都是完整的,所以看起来像这样:
00:00 [(lat1,lon1)]
00:01 [(lat2,lon2)]
00:02 []
00:03 []
00:04 [(lat3,lon3)]
...
问题是,当我在range(len(dictionary.keys()))
中运行for
时,它会让我摆脱索引错误。在我的数据库中第一个"块"完整的信息从00:00开始,到01:12结束,这意味着我的代码生成的列表停在那里,当下一个块在06:59开始时它不会回来。
position是我的字典,其中包含以时间为键的位置
for ci in range(len(position.keys())-1):
lat1 = position[lst_time[ci]][0][0]
lon1 = position[lst_time[ci]][0][1]
lat2 = position[lst_time[ci+1]][0][0]
lon2 = position[lst_time[ci+1]][0][1]
vmtemp = (((haversine(lon1, lat1, lon2, lat2))*1000)/60) #function to estimate speed
tpl_vel = (dt.strptime(lst_time[ci+1],'%H:%M'), vmtemp)
lst_vel2.append(tpl_vel)
答案 0 :(得分:1)
抓住失败的时间戳:
for ci in range(len(position.keys())-1):
try:
lat1 = position[lst_time[ci]][0][0]
lon1 = position[lst_time[ci]][0][1]
lat2 = position[lst_time[ci+1]][0][0]
lon2 = position[lst_time[ci+1]][0][1]
vmtemp = (((haversine(lon1, lat1, lon2, lat2))*1000)/60) #function to estimate speed
tpl_vel = (dt.strptime(lst_time[ci+1],'%H:%M'), vmtemp)
lst_vel2.append(tpl_vel)
except IndexError:
print("-I- Time",lst_time[ci],"or",lst_time[ci+1],"does not exist")
某些位置没有元组(或任何东西),因此访问那里的项目(第一个[0]
)超出范围。你以这种方式迭代一本字典似乎很奇怪 - 它有点挫败了目的。
答案 1 :(得分:0)
当您尝试从空列表中索引[0][0]
时,看起来会出现'索引错误'(尝试引用[0][1]
会发生同样的事情,但代码不会做到这一点)。您需要标记缺少数据,以便您可以使用它执行其他操作。试试以下内容:
for ci in range(len(position.keys())-1):
if len(position[lst_time[ci]])<2:
### Do something with the missing data
else:
lat1 = position[lst_time[ci]][0][0]
lon1 = position[lst_time[ci]][0][1]
lat2 = position[lst_time[ci+1]][0][0]
lon2 = position[lst_time[ci+1]][0][1]
vmtemp = (((haversine(lon1, lat1, lon2, lat2))*1000)/60) #function to estimate speed
tpl_vel = (dt.strptime(lst_time[ci+1],'%H:%M'), vmtemp)
lst_vel2.append(tpl_vel)