Python:如何合并键对应值为列表的多个字典?
合并两个值为列表的字典的正确方法
嘿,这个问题我熟!合并两个键对应值为列表的字典,核心需求就是共同键的列表要合并元素,独有键直接保留原列表,下面给你两种实用的实现方式:
方法一:基础手动合并(直观易懂)
这种方法逻辑清晰,适合新手理解,还能避免意外修改原字典的列表:
先明确你的输入字典(补全了d2的内容方便演示):
d1 = {'apple': ['5', '65'], 'blue': ['9', '10', '15', '43'], 'candle': ['15'], 'is': ['5', '6', '13', '45', '96'], 'yes': ['1', '2', '3', '11'], 'zone': ['5', '6', '9', '10', '12', '14', '18', '19', '23', '24', '25', '29', '45']} d2 = {'apple': ['43', '47'], 'appricote': ['1', '2', '3', '4', '5', '6'], 'candle': ['20', '25'], 'is': ['100'], 'no': ['7', '8', '9']}
合并代码如下:
# 先复制d1的所有内容到新字典,避免修改原d1 merged_dict = d1.copy() # 遍历d2的每一组键值对 for key, value_list in d2.items(): if key in merged_dict: # 如果键已经存在,把d2的列表元素追加进去 merged_dict[key].extend(value_list) else: # 如果键不存在,直接添加新的键值对(用copy防止后续修改d2影响合并结果) merged_dict[key] = value_list.copy()
合并后,merged_dict['apple']会变成['5', '65', '43', '47'],merged_dict['appricote']会完整保留d2的列表,完全符合需求。
方法二:用defaultdict简化代码(简洁高效)
要是你觉得手动判断键是否存在麻烦,可以用collections模块里的defaultdict,它会自动为不存在的键创建空列表,代码更简洁:
from collections import defaultdict # 初始化一个默认值为列表的字典 merged_dict = defaultdict(list) # 先把d1的所有列表元素加入 for key, value_list in d1.items(): merged_dict[key].extend(value_list) # 再把d2的所有列表元素加入 for key, value_list in d2.items(): merged_dict[key].extend(value_list) # 要是需要转换成普通字典,直接用dict()转换即可 merged_dict = dict(merged_dict)
额外需求:合并后去重
如果你的列表里有重复元素,想要合并后自动去重,只要稍微修改追加逻辑就行(能保持原元素顺序):
# 以方法一为例,修改extend部分 merged_dict[key].extend(item for item in value_list if item not in merged_dict[key])
内容的提问来源于stack exchange,提问作者Gerasimos Ragavanis
相关产品推荐
相关产品推荐

