如何合并键相似但值不同的两个Python字典?
合并两个字典并拼接对应列表值
你遇到的问题核心是列表加法不会原地修改原列表,而且直接遍历赋值时没处理键不存在的情况。以下是几种可行的解决方案:
方法一:遍历修改原字典b
这种方法直接修改字典b,把a的列表内容合并进去(a的列表在前,b的原列表在后):
a = {'bob': [1, 2], 'bill': [3, 4], 'steve': [1]} b = {'bob': [4], 'bill': [7]} for key, vals in a.items(): if key in b: # 用列表加法生成新列表,赋值回b的对应键 b[key] = vals + b[key] else: # 若b中没有该键,直接添加a的列表(用copy避免后续修改a影响b,可选) b[key] = vals.copy() print(b) # 输出: {'bob': [1, 2, 4], 'bill': [3, 4, 7], 'steve': [1]}
方法二:用字典推导式生成新字典
如果不想修改原字典a和b,直接生成合并后的新字典:
a = {'bob': [1, 2], 'bill': [3, 4], 'steve': [1]} b = {'bob': [4], 'bill': [7]} # 取所有键的并集,对每个键拼接a和b的列表(不存在则用空列表) merged_dict = { key: a.get(key, []) + b.get(key, []) for key in set(a.keys()) | set(b.keys()) } print(merged_dict) # 输出: {'bob': [1, 2, 4], 'bill': [3, 4, 7], 'steve': [1]}
为什么之前的列表加法没生效?
如果你的代码类似b[key] + a[key]但没赋值,那只会生成一个新列表,不会修改b中原有的列表;如果b中没有对应的key,直接访问b[key]还会抛出KeyError。上述两种方法都处理了这两个问题:要么先判断键是否存在,要么用get方法默认返回空列表。
内容的提问来源于stack exchange,提问作者bendan
相关产品推荐
相关产品推荐

