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

Python使用d.values()遍历修改字典值不生效问题求解

问题原因

第二段代码无法生效,核心原因有两个:

  • int属于Python中的不可变类型,循环里通过for i in d.values()拿到的i只是指向当前字典值的临时变量,执行i = e时,只是把临时变量i的指向改成了e,根本没有修改原字典中存储的键值对。
  • 字典是按键索引的数据结构,只遍历值的话拿不到值对应的键,根本无法定位到需要修改的具体条目,自然没法完成值替换。
修改方案

要实现替换功能,必须在匹配到目标值时拿到对应的键,通过d[key] = e的方式对原字典做赋值操作。如果你希望保留遍历值做判断的逻辑,可以按如下方式修改,显式调用d.values()完成值遍历:

def replace(d, v, e):
    # 同步遍历键和值,判断逻辑直接匹配d.values()取出的值
    for key, i in zip(d.keys(), d.values()):
        if i == v:
            d[key] = e
    return d

print(replace({1:2, 3:4, 4:2}, 2, 7)) # 输出: {1: 7, 3: 4, 4: 7}

如果不需要强制显式调用d.values(),还有更简洁的写法:直接遍历字典的键,通过键取值做判断即可,效果完全一致。

def replace(d, v, e):
    for key in d:
        if d[key] == v:
            d[key] = e
    return d

你最开始写的通过d.items()同时遍历键值的写法,本身就是Python中这类字典修改场景的标准最优写法,可读性和执行效率都更好。

补充:如果字典存储的值是列表、字典这类可变类型,直接修改遍历拿到的可变对象内部内容,会同步反映到原字典上;但对于int、str、tuple这类不可变类型,给循环变量重新赋值永远不会影响原容器内存储的内容。

内容的提问来源于stack exchange,提问作者Don Adventure

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:36:37