Python中使用**解包合并多个字典仅输出单个字典问题求助
问题原因
你遇到的输出结果是Python字典**解包合并的固有规则导致的:
- Python字典的键具有唯一性,使用
{**dict1, **dict2, **dict3}语法合并字典时,会按照从左到右的顺序逐个插入键值对,如果出现重复键,后插入的键值对会直接覆盖先插入的同名键值对 - 你提供的三个
atom字典的键完全一致,均为first_name、last_name、City,因此合并时atom2的内容会覆盖atom1的内容,atom3的内容又会覆盖atom2的内容,最终变量p就只剩下了最后一个字典atom3的内容。 - 如果你的三个字典不存在重复键,原写法是可以正常合并所有键值对的。
常见场景解决方案
场景1:需要保留三个字典的独立信息
如果三个字典是三条独立的原子数据,不需要合并为单个单层字典,直接存入列表即可:
p = [atom1, atom2, atom3] print(p)
输出会完整保留三个字典的所有内容。
场景2:需要合并相同键的所有值为列表
如果需要把同个键对应的三个值全部收集起来,可以用以下写法实现:
from collections import defaultdict p = defaultdict(list) for d in [atom1, atom2, atom3]: for k, v in d.items(): p[k].append(v) # 可选:转换为普通字典 p = dict(p) print(p)
输出结果为:
{'first_name': ['Alfa', 'Beta', 'Gama'], 'last_name': ['A.', 'B.', 'G.'], 'City': ['Osaka', 'kyoto', 'L.A.']}
内容的提问来源于stack exchange,提问作者Sharman00.0
相关产品推荐
相关产品推荐

