如何合并两个含重复键的Dict并实现F1关键词查询功能?
嘿,我来帮你搞定这个问题!合并带重复键的字典+搜索F1返回结果的需求,其实分两步就能轻松实现,咱们一步步来:
第一步:合并两个存在重复键的字典
这里分两种常见场景,你可以根据自己的需求选择:
场景1:重复键保留最后一个字典的值(覆盖模式)
如果重复键只需要保留最后出现的那个值,Python 3.9+可以用|运算符,旧版本用字典解包的方式:
dict1 = {"F1": "ResultA", "F2": "ResultB"} dict2 = {"F1": "ResultC", "F3": "ResultD"} # Python 3.9+ 简洁写法 merged_dict = dict1 | dict2 # 兼容Python 3.8及以下的写法 # merged_dict = {**dict1, **dict2} print(merged_dict) # 输出: {'F1': 'ResultC', 'F2': 'ResultB', 'F3': 'ResultD'}
这种方式下,后面的字典(dict2)会覆盖前面字典(dict1)的重复键值。
场景2:重复键的值合并为列表(保留所有数据)
如果不想丢失任何一个重复键的值,咱们可以把同一个键的所有值放到列表里,用普通循环或者collections.defaultdict都能实现:
方式一:普通循环实现
dict1 = {"F1": "ResultA", "F2": "ResultB"} dict2 = {"F1": "ResultC", "F3": "ResultD"} merged_dict = {} # 先把第一个字典的键值对存入,值转成列表 for key, val in dict1.items(): merged_dict[key] = [val] # 处理第二个字典,重复键就追加值,新键就创建列表 for key, val in dict2.items(): if key in merged_dict: merged_dict[key].append(val) else: merged_dict[key] = [val] print(merged_dict) # 输出: {'F1': ['ResultA', 'ResultC'], 'F2': ['ResultB'], 'F3': ['ResultD']}
方式二:用defaultdict简化代码
from collections import defaultdict dict1 = {"F1": "ResultA", "F2": "ResultB"} dict2 = {"F1": "ResultC", "F3": "ResultD"} merged_dict = defaultdict(list) # 遍历两个字典,把所有值追加到对应键的列表里 for d in [dict1, dict2]: for key, val in d.items(): merged_dict[key].append(val) # 要是需要转成普通字典,就用dict()转换 merged_dict = dict(merged_dict) print(merged_dict) # 输出和上面一致
第二步:搜索关键词F1返回结果
合并完字典之后,搜索就非常简单了,推荐用get()方法,避免键不存在时报错:
针对场景1(值是单个元素):
# 用get()方法,第二个参数是键不存在时的默认返回值 result = merged_dict.get("F1", "未找到匹配的结果") print(result) # 输出: ResultC
针对场景2(值是列表):
result = merged_dict.get("F1", ["未找到匹配的结果"]) print(result) # 输出: ['ResultA', 'ResultC']
你也可以把搜索逻辑封装成一个函数,方便反复调用:
def search_target(merged_dict, keyword): return merged_dict.get(keyword, "未找到该关键词对应的结果") # 调用示例 print(search_target(merged_dict, "F1"))
内容的提问来源于stack exchange,提问作者Moo
相关产品推荐
相关产品推荐

