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

2024-07-04 08:07:35 发布

您现在位置:Python中文网/ 问答频道 /正文

该程序从各自的列表中提取两个输出,并形成一个字典,找到相应的一对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')

目前的结果是:

      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 12
{'Light1_ON': '2019-10-28 09:11:23', 'Light2_ON': '2019-10-28 10:15:12', 'Light1_OFF': '2019-10-28 15:11:23', 'Light2_OFF': '2019-10-28 22:00:23', 'Light3_ON': '2019-10-29 05:12:23'} 6
Fan1P3_OFF
Light2_OFF
Retrieve Error 2 10
Heater1_OFF
Light3_ON
Retrieve Error 9
Current Dict Contain: {'Light1_ON': '2019-10-28 09:11:23', 'Light2_ON': '2019-10-28 10:15:12', 'Light1_OFF': '2019-10-28 15:11:23', 'Light2_OFF': '2019-10-28 22:00:23', 'Light3_ON': '2019-10-29 05:12:23'} 11
Length of dict: 5 12

我想要的结果是列表只剩下light3u和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' }

Tags: inforifonprintoffappendoutputlist

热门问题