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
相关产品推荐
相关产品推荐

