贝利信息

如何高效匹配两个字典列表中相同时间戳的键值对并构建映射字典

日期:2026-01-02 00:00 / 作者:心靈之曲

本文介绍在python中高效比较两个含时间戳字典列表(如api响应数据),通过哈希索引实现o(n+m)时间复杂度的精准匹配,并生成{"list1_value": "list2_value"}格式的映射字典。

在处理时序数据(如日志、监控指标或API返回的带时间戳记录)时,常需跨两个列表按时间字段(如 "time")对齐并提取对应值。若直接使用嵌套循环或 itertools.product(时间复杂度 O(n×m)),不仅低效,还会产生冗余判断和空值干扰(如原问题中输出大量 None)。更优解是构建哈希索引 + 单次遍历——即用字典预存 list1 中 "time" 到完整字典的映射,再遍历 list2 快速查找匹配项。

以下是推荐实现(已优化可读性与健壮性):

list1 = [
    {"time": "2025-01-29T18:32:24.000Z", "value": "abc"},
    {"time": "2025-01-30T19:47:48.000Z", "value": "def"},
    {"time": "2025-01-30T19:24:20.000Z", "value": "ghi"},
]

list2 = [
    {"time": "2025-01-30T18:34:44.000Z", "value": "xyz"},
    {"time": "2025-01-30T19:47:48.000Z", "value": "pqr"},
    {"time": "2025-01-30T19:24:20.000Z", "value": "jkl"},
]

# 步骤1:构建 list1 的 time → dict 索引(O(n))
index_map = {item["time"]: item for item in list1}

# 步骤2:遍历 list2,匹配 time 并构建结果字典(O(m))
result = {}
for item2 in list2:
    t = item2["time"]
    if t in index_map:  # 哈希查找,平均 O(1)
        result[index_map[t]["value"]] = item2["value"]

print(result)  # {'def': 'pqr', 'ghi': 'jkl'}

优势说明

⚠️ 注意事项

? 进阶技巧
也可用字典推导式一行写出(适合简单场景):

result = {item1["value"]: item2["value"] 
          for item2 in list2 
          for item1 in list1 
          if item1["time"] == item2["time"]}

但此写法本质仍是 O(n×m),不推荐用于大数据量

综上,哈希索引法是解决此类“按字段关联字典列表”问题的标准实践,兼顾性能、可读性与工程鲁棒性。