Python字典总范围(len(dictionary.keys())INCLUDING空键

时间:2018-02-08 18:16:58

标签: python python-2.7 dictionary

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)

2 个答案:

答案 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)