Python中使用zip推导字典为何结果与预期不符?
字典推导式结果与预期不符的原因
你的代码与问题细节如下:
原始代码
names = ["Person1", "Person2", "Person3"] jobs = ["It", "Worker", "Kid"] mydict = {key if key == "Person2" else "Something": value for key, value in zip(names, jobs)} print(mydict)
实际输出
{'Something': 'Kid', 'Person2': 'Worker'}
预期输出(无法实现)
{'Something': 'It', 'Person2': 'Worker', 'Something':'Kid'}
核心原因:Python字典的键具有唯一性
Python的字典(dict)是键唯一的映射结构,同一个键在字典中只能存在一次。当你尝试给已存在的键赋值时,新值会直接覆盖旧值。
你的推导式执行过程拆解:
- 第一次遍历:
key=Person1→ 键为Something,值为It,字典为{"Something": "It"} - 第二次遍历:
key=Person2→ 键为Person2,值为Worker,字典更新为{"Something": "It", "Person2": "Worker"} - 第三次遍历:
key=Person3→ 键为Something,此时该键已存在,新值Kid覆盖旧值It,最终字典变为{"Something": "Kid", "Person2": "Worker"}
实现“一键多值”的解决方案
如果需要一个键对应多个值,不能用普通字典,需要把值存储为列表(或其他可迭代结构)。以下是两种实现方式:
方式1:普通循环手动处理
names = ["Person1", "Person2", "Person3"] jobs = ["It", "Worker", "Kid"] mydict = {} for key, value in zip(names, jobs): dict_key = key if key == "Person2" else "Something" # 若键不存在则初始化列表,再追加值 if dict_key not in mydict: mydict[dict_key] = [] mydict[dict_key].append(value) print(mydict) # 输出: {'Something': ['It', 'Kid'], 'Person2': ['Worker']}
方式2:使用collections.defaultdict简化
from collections import defaultdict names = ["Person1", "Person2", "Person3"] jobs = ["It", "Worker", "Kid"] mydict = defaultdict(list) for key, value in zip(names, jobs): dict_key = key if key == "Person2" else "Something" mydict[dict_key].append(value) print(dict(mydict)) # 输出: {'Something': ['It', 'Kid'], 'Person2': ['Worker']}
内容的提问来源于stack exchange,提问作者Den
相关产品推荐
相关产品推荐

