本文介绍如何高效比较两个字典列表,基于共同的 `"time"` 键提取对应 `"value"` 字段,构建形如 `{"def": "pqr"}` 的键值映射字典,避免 o(n²) 嵌套遍历,推荐使用哈希索引法提升性能。
在处理时间序列数据(如 API 响应、日志记录或传感器采样)时,常需对多个字典列表按时间戳对齐并建立字段映射。原始需求中,list1 和 list2 各含若干带 "time" 与 "value" 键的字典,目标是:当两列表中字典的 "time" 值相等时,以 list1 的 "value" 为 key、list2 的 "value" 为 value,生成最终映射字典。
直接使用 itertools.product(如提问中尝试)虽逻辑直观,但时间复杂度为 O(m×n),且需额外过滤 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(len(list1)))
index_by_time = {d["time"]: d for d in list1}
# 步骤2:遍历 list2,匹配 time 并构建结果字典(O(len(list2)))
result = {
index_by_time[d["time"]]["value"]: d["value"]
for d in list2
if d["time"] in index_by_time
}
print(result)
# 输出: {'def': 'pqr', 'ghi': 'jkl'}✅ 优势说明:
dict(list))。⚠️ 注意事项:
该方法兼顾性能、可维护性与 Pythonic 风格,是字典列表条件匹配任务的标准实践方案。