Python中如何将两个对应索引的输出分别作为字典的键与值存储
解决Python中按索引对应将两组输出转为字典的问题
首先得指出你当前代码里的一个关键问题——list.append()方法是没有返回值的(实际返回None),所以你写的label = olabel.append(output)其实是把None赋值给了label变量,后面想用label[i]取值自然会报错。咱们一步步来修正,实现你要的功能:
正确实现步骤
1. 初始化收集数据的列表
先创建两个空列表,用来持续存储KNN输出的标签和日期:
olabel = [] ldate = []
2. 持续追加KNN的输出结果
每次从KNN模型拿到output(键)和ld(对应值)后,直接追加到列表里,不要把append()的返回值赋值给其他变量:
# 第一次获取KNN输出 output = 'Light1on' ld = '2019-10-28 09:59:00' olabel.append(output) ldate.append(ld) # 模拟第二次更新输出 output = 'Light2on' ld = '2019-10-28 10:59:00' olabel.append(output) ldate.append(ld)
3. 将两个列表转为对应字典
这里有两种简洁的方式:
- 方法一:字典推导式(适合需要自定义索引范围的场景)
遍历列表的索引,把对应位置的元素配对成键值对:outputList = {olabel[i]: ldate[i] for i in range(len(olabel))} - 方法二:用
zip()配合dict()(更简洁,推荐)zip()会自动把两个列表中索引对应的元素配对,再用dict()直接转成字典:outputList = dict(zip(olabel, ldate))
验证结果
执行完上面的代码后:
- 初始状态(第一次追加后):
olabel = ['Light1on'],ldate = ['2019-10-28 09:59:00']outputList会是{'Light1on': '2019-10-28 09:59:00'} - 更新一次后:
olabel = ['Light1on', 'Light2on'],ldate = ['2019-10-28 09:59:00', '2019-10-28 10:59:00']outputList会是{'Light1on': '2019-10-28 09:59:00', 'Light2on': '2019-10-28 10:59:00'}
⚠️ 注意:如果olabel中出现重复的标签(即同一个键出现多次),后面的键值对会覆盖前面的,因为字典的键是唯一的,这点要根据你的业务需求留意哦。
内容的提问来源于stack exchange,提问作者ZH Law
相关产品推荐
相关产品推荐

