Python中如何合并多个键相同、值不同的字典?
实现方案
你可以按照公共字段Question__questions对字典分组,将需要聚合的option、is_correct_answer字段值收集为列表,固定不变的公共字段直接复用即可,以下是两种适用不同场景的实现方式:
单题目场景(当前输入仅包含一道题)
代码逻辑简单,直接遍历收集聚合字段即可:
# 输入的字典列表 input_list = [ { 'Question__questions': 'What is Python?', 'option': 'Front-end Language', 'imagesOptions': '', 'is_correct_answer': 'False' }, { 'Question__questions': 'What is Python?', 'option': 'Backend-end Language', 'imagesOptions': '', 'is_correct_answer': 'True' }, { 'Question__questions': 'What is Python?', 'option': 'Both', 'imagesOptions': '', 'is_correct_answer': 'False' }, { 'Question__questions': 'What is Python?', 'option': 'None', 'imagesOptions': '', 'is_correct_answer': 'False' } ] if input_list: # 初始化结果,复用公共字段 res = { "Question__questions": input_list[0]["Question__questions"], "imagesOptions": input_list[0]["imagesOptions"], "option": [], "is_correct_answer": [] } for item in input_list: res["option"].append(item["option"]) res["is_correct_answer"].append(item["is_correct_answer"]) output = [res] print(output)
运行后输出完全符合你的预期格式。
多题目通用场景(支持同时处理多道不同题目)
如果后续输入列表包含多道不同的题目,可使用分组映射的方式自动按题目聚合:
from collections import defaultdict def merge_question_dict(input_list): # 以题目内容为键做分组 group_map = defaultdict(lambda: {"option": [], "is_correct_answer": []}) for item in input_list: q_key = item["Question__questions"] # 公共字段仅赋值一次 if "Question__questions" not in group_map[q_key]: group_map[q_key]["Question__questions"] = item["Question__questions"] group_map[q_key]["imagesOptions"] = item["imagesOptions"] # 收集聚合字段 group_map[q_key]["option"].append(item["option"]) group_map[q_key]["is_correct_answer"].append(item["is_correct_answer"]) # 转为列表格式返回 return list(group_map.values()) output = merge_question_dict(input_list) print(output)
内容的提问来源于stack exchange,提问作者Wasim
相关产品推荐
相关产品推荐

