在python中,如何让列表循环直到它为空或列表(字典)中的一个值
该程序从各自的列表中提取两个输出,并形成一个字典,找到一个on和另一个off DateTime对应的对,并将其存储到df中。但是,在列表为空之前,它不会循环 这是我当前的代码:在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
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' }