Python:在字典列表中查找指定传感器与日期匹配项的索引问题
问题:查找传感器时序数据字典的索引位置
我有一个存储传感器时序数据的大型字典列表,每个字典包含传感器编号、数据采集时间与对应数值。现在需要找到指定传感器和采集日期对应的字典的索引位置,用来更新传感器数值。
原代码
big_list = [ dict({'sensor':12,'time':'2022-02-03','value':10}), dict({'sensor':22,'time':'2022-02-03','value':12}), dict({'sensor':32,'time':'2022-02-03','value':24}), dict({'sensor':12,'time':'2022-02-04','value':17}), dict({'sensor':22,'time':'2022-02-04','value':13}), dict({'sensor':32,'time':'2022-02-04','value':21})] # Find index of an item item_to_find = dict({'time':'2022-02-03','sensor':32}) # solution big_list.index(item_to_find)
当前错误输出
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: {'sensor': 32, 'time': '2022-02-03'} is not in list
预期输出
2
问题原因
list.index()方法要求传入的对象与列表中的元素完全键值匹配。你定义的item_to_find只包含sensor和time两个键,但列表中的字典还额外包含value键,因此无法匹配成功。
解决方案
1. 基础遍历查找(适合小规模数据)
遍历列表,逐个检查目标字段是否匹配:
big_list = [ dict({'sensor':12,'time':'2022-02-03','value':10}), dict({'sensor':22,'time':'2022-02-03','value':12}), dict({'sensor':32,'time':'2022-02-03','value':24}), dict({'sensor':12,'time':'2022-02-04','value':17}), dict({'sensor':22,'time':'2022-02-04','value':13}), dict({'sensor':32,'time':'2022-02-04','value':21}) ] item_to_find = {'time':'2022-02-03','sensor':32} target_index = None for idx, item in enumerate(big_list): if item['sensor'] == item_to_find['sensor'] and item['time'] == item_to_find['time']: target_index = idx break print(target_index) # 输出:2
2. 生成器表达式简化写法
用生成器表达式快速获取第一个匹配项的索引:
target_index = next( idx for idx, item in enumerate(big_list) if item['sensor'] == item_to_find['sensor'] and item['time'] == item_to_find['time'] ) print(target_index) # 输出:2
3. 预处理映射表(适合大规模/多次查询场景)
如果需要频繁查询,先将数据预处理为(sensor, time)到索引的映射表,后续查询可达到O(1)时间复杂度:
# 预处理生成映射表 sensor_time_map = {(item['sensor'], item['time']): idx for idx, item in enumerate(big_list)} # 查询目标索引 target_key = (item_to_find['sensor'], item_to_find['time']) target_index = sensor_time_map[target_key] print(target_index) # 输出:2
内容的提问来源于stack exchange,提问作者Mainland
相关产品推荐
相关产品推荐

