Python字典合并:重复键对应列表拼接而非覆盖值的实现方法
实现字典重复键对应列表的拼接合并
要实现重复键对应列表的拼接而非覆盖,你可以用以下几种方法:
方法一:手动遍历合并
先复制第一个字典,再遍历第二个字典的键值对,对重复键执行列表扩展操作:
dict1 = {'a': ['xxx', 'zzz']} dict2 = {'a': ['yyy', 'zzz']} dict3 = dict1.copy() for key, val in dict2.items(): if key in dict3: dict3[key].extend(val) else: dict3[key] = val.copy() # 可选,避免后续修改影响原字典的列表
执行后dict3的结果为:{'a': ['xxx', 'zzz', 'yyy', 'zzz']}
方法二:使用collections.defaultdict
如果需要合并多个字典,这种方式更灵活:
from collections import defaultdict dict1 = {'a': ['xxx', 'zzz']} dict2 = {'a': ['yyy', 'zzz']} dict3 = defaultdict(list) # 遍历所有要合并的字典 for d in [dict1, dict2]: for key, val in d.items(): dict3[key].extend(val) # 若需要转为普通字典 dict3 = dict(dict3)
方法三:字典推导式(适用于两个字典的场景)
通过集合获取所有键,再对每个键拼接对应列表:
dict1 = {'a': ['xxx', 'zzz']} dict2 = {'a': ['yyy', 'zzz']} all_keys = set(dict1) | set(dict2) dict3 = {key: dict1.get(key, []) + dict2.get(key, []) for key in all_keys}
这里用+拼接会生成新列表,不会修改原字典的列表,适合需要保留原数据的场景。
为什么原方法不生效?
字典的|(合并)和|=(原地更新)运算符的默认逻辑是用后出现的字典值覆盖前一个,所以重复键的列表会被直接替换,无法实现拼接。
内容的提问来源于stack exchange,提问作者ericdwkim
相关产品推荐
相关产品推荐

