在python中,如何让列表循环直到它为空或列表(字典)中的一个值

在python中,如何让列表循环直到它为空或列表(字典)中的一个值,python,python-3.x,list,dictionary,machine-learning,Python,Python 3.x,List,Dictionary,Machine Learning,该程序从各自的列表中提取两个输出,并形成一个字典,找到一个on和另一个off DateTime对应的对,并将其存储到df中。但是,在列表为空之前,它不会循环 这是我当前的代码: import random, pandas as pd from collections import defaultdict import difflib olist = [] storedListOn = [] storedListOff =[] storedListDevice = [] storedListAp

该程序从各自的列表中提取两个输出,并形成一个字典,找到一个on和另一个off DateTime对应的对,并将其存储到df中。但是,在列表为空之前,它不会循环

这是我当前的代码:

import random, pandas as pd
from collections import defaultdict
import difflib

olist = []
storedListOn = []
storedListOff =[]
storedListDevice = []
storedListAppliance = []
storeListCategory = []
knnoutputlist = []
ldate = []

label = ['Light1_ON','Light2_ON','Fan1P3_ON','Light1_OFF','Heater1_ON','Fan1P3_OFF','Light2_OFF','Heater1_OFF','Light3_ON']
date = ['2019-10-28 09:11:23','2019-10-28 10:15:12','2019-10-28 12:23:52','2019-10-28 15:11:23','2019-10-28 18:30:20','2019-10-28 20:12:32','2019-10-28 22:00:23','2019-10-28 22:11:12','2019-10-29 05:12:23']
device = '8655'

for i in label:
    knnoutputlist.append(i)
    knnlist = knnoutputlist[:]
    print(knnlist,'check 1')

for j in date:
    ldate.append(j)
    labeldate = ldate[:]
    print(labeldate,'check 2')

outputList = {i:j for i,j in zip(knnlist,labeldate)}

print (str(outputList),'check 3')

if(len(list(outputList)) > 1):
  for i in list(outputList):

      i == list(outputList)[0]

      print(i)
      skeys = difflib.get_close_matches(i, outputList, n=2, cutoff=0.75)

      if(len(skeys) < 2):
        continue

      if 'ON' in (skeys[0] and skeys[1]):

        print("Retrieve Error",'9')

      elif 'OFF' in skeys[0]:      
        print("Retrieve Error 2",'10')

      else:

        for key, val in outputList.items():

            if skeys[0] in key:
              storedListOn.append(val)
            if skeys[1] in key:
              storedListOff.append(val)   

        [outputList.pop(key) for key in skeys]

        klist1 = skeys[0].split("_",1)
        klist2 = skeys[1].split("_",1)

        ak1 = klist1[0]
        sk1 = klist1[1]

        ak2 = klist2[0]
        sk2 = klist2[1]

        storedListDevice.append(device)

        if(ak1 == ak2):

          storedListAppliance.append(ak1)

          if 'Light' in ak1:

              storeListCategory.append('Light')
          if 'Fan' in ak1:

              storeListCategory.append('Fan')
          if 'Heater' in ak1:

              storeListCategory.append('Heater')

        storeDF =  list(zip(storedListAppliance,  storedListOn, storedListOff, storedListDevice, storeListCategory))
        sdf = pd.DataFrame(data = storeDF, columns = ['type', 'OnTime' , 'OffTime', 'device', 'category'])
        print(sdf,'12')
        #ptcn.set_index('time', inplace = True)

        print(str(outputList),'6')

print("Current Dict Contain:",str(outputList),'11')
print('Length of dict:', len(outputList),'12')
我想要的结果是列表只剩下Light3_和它的DateTime,但是我得到的结果在df中只得到了2行正确的行

我想要的输出:

      type               OnTime              OffTime device category
0   Fan1P3  2019-10-28 12:23:52  2019-10-28 20:12:32   8655      Fan
1  Heater1  2019-10-28 18:30:20  2019-10-28 22:11:12   8655   Heater
2   Light1  2019-10-28 09:11:23  2019-10-28 15:11:23   8655    Light
3   Light2  2019-10-28 10:15:12  2019-10-28 22:00:23   8655    Light

Current Dict Contain:{ 'Light3_ON': '2019-10-29 05:12:23' }

你能删除所有不必要的代码并明确指出输出应该是什么样子吗?@VadimShkaberda我已经对代码做了更改。如果你能解决它,我想要的输出将是惊人的。看起来你想要的是创建一个列出各种设备的数据框,打开和关闭设备的时间和类型,同时在源字典中保留已打开但未关闭的设备。然而,您的代码正在做很多与此无关的事情,如果不了解您实际要做什么,调试几乎是不可能的。然而,这很可能只需要几行代码就可以完成。
      type               OnTime              OffTime device category
0   Fan1P3  2019-10-28 12:23:52  2019-10-28 20:12:32   8655      Fan
1  Heater1  2019-10-28 18:30:20  2019-10-28 22:11:12   8655   Heater
2   Light1  2019-10-28 09:11:23  2019-10-28 15:11:23   8655    Light
3   Light2  2019-10-28 10:15:12  2019-10-28 22:00:23   8655    Light

Current Dict Contain:{ 'Light3_ON': '2019-10-29 05:12:23' }