You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)是键唯一的映射结构,同一个键在字典中只能存在一次。当你尝试给已存在的键赋值时,新值会直接覆盖旧值。

你的推导式执行过程拆解:

  1. 第一次遍历:key=Person1 → 键为Something,值为It,字典为{"Something": "It"}
  2. 第二次遍历:key=Person2 → 键为Person2,值为Worker,字典更新为{"Something": "It", "Person2": "Worker"}
  3. 第三次遍历: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:03:18