You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:35:28