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

Python字典列表匹配record1值追加新键值对(优先用itertools)

实现方案

核心思路

  • 先将to_append转换为以record1值为键、new_record值为值的映射字典,降低匹配查询的时间复杂度
  • 借助itertools模块的starmap、repeat方法遍历处理原列表的每个字典,匹配到就追加新字段,未匹配保持原有内容,不会丢失原列表条目

完整代码实现

import itertools

original_list = [{"record1": 1, "record2": "loremipsum1", "record3": "loremipsum2", "record4": "loremipsum3"}, 
{"record1": 2, "record2": "loremipsum4", "record3": "loremipsum5", "record4": "loremipsum6"}, 
{"record1": 3, "record2": "loremipsum7", "record3": "loremipsum8", "record4": "loremipsum9"}, 
{"record1": 4, "record2": "loremipsum10", "record3": "loremipsum12", "record4": "loremipsum13"}, 
{"record1": 5, "record2": "loremipsum11", "record3": "loremipsum12", "record4": "loremipsum13"}]

to_append = [{"record1": 1, "new_record": "new1"},
{"record1": 2, "new_record": "new2"}]

# 构建匹配查找映射
append_mapping = {item["record1"]: item["new_record"] for item in to_append}

def merge_dict(orig_item, mapping):
    # 匹配到则追加新字段,未匹配直接返回原字典(如需不修改原列表可返回orig_item.copy())
    if orig_item["record1"] in mapping:
        orig_item["new_record"] = mapping[orig_item["record1"]]
    return orig_item

# 用itertools实现遍历处理
result = list(itertools.starmap(merge_dict, zip(original_list, itertools.repeat(append_mapping))))

# 输出结果
for item in result:
    print(item)

输出结果

{'record1': 1, 'record2': 'loremipsum1', 'record3': 'loremipsum2', 'record4': 'loremipsum3', 'new_record': 'new1'}
{'record1': 2, 'record2': 'loremipsum4', 'record3': 'loremipsum5', 'record4': 'loremipsum6', 'new_record': 'new2'}
{'record1': 3, 'record2': 'loremipsum7', 'record3': 'loremipsum8', 'record4': 'loremipsum9'}
{'record1': 4, 'record2': 'loremipsum10', 'record3': 'loremipsum12', 'record4': 'loremipsum13'}
{'record1': 5, 'record2': 'loremipsum11', 'record3': 'loremipsum12', 'record4': 'loremipsum13'}

说明

  • 如果你不需要修改原original_list的内容,把merge_dict函数里的逻辑改成返回新字典即可:return {**orig_item, "new_record": mapping[orig_item["record1"]]} if orig_item["record1"] in mapping else orig_item.copy()
  • 这里用到了itertools.starmap迭代执行合并逻辑、itertools.repeat批量生成映射对象供匹配使用,完全符合优先使用itertools的要求

内容的提问来源于stack exchange,提问作者thinkpythonxoxo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:04