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

Python循环为字典赋值时所有值均为最后一项的问题求解

问题原因

所有键对应值都被最后一次循环结果覆盖的核心原因是:Python中字典属于可变引用类型

  • 你在for循环外部仅初始化了一次dict_shift = {},整个循环执行过程中始终在修改这同一个字典对象的内容
  • 执行output_table[val_number] = dict_shift时,存入的不是当前字典内容的快照,而是这个字典的内存引用
  • 循环结束后output_table的所有键都指向同一个dict_shift实例,存储的自然是最后一次循环写入的c_shift3、h_shift3值

注:你给出的预期输出示例最后一行遗漏了"val_number3":键,属于笔误。

修复方法

将dict_shift的初始化逻辑移到for循环内部,每次处理行数据时都创建一个全新的独立字典,再赋值给对应键即可。修复后的核心代码如下:

def fetch_value_in_table(input_table):
    # 不建议使用global传递结果,直接通过return返回值更规范,可避免全局变量意外污染
    output_table = {}

    for line in input_table: 
        val_number = line[0]
        c_shift = line[1]
        h_shift = line[2]
        # 每次循环新建独立的dict_shift实例,和其他循环的结果互不影响
        dict_shift = {}
        dict_shift['c_shift'] = c_shift
        dict_shift['h_shift'] = h_shift

        output_table[val_number] = dict_shift

    return output_table

也可以用更简洁的字面量写法,省去单独初始化dict_shift变量的步骤:

def fetch_value_in_table(input_table):
    output_table = {}
    for line in input_table:
        val_number, c_shift, h_shift = line
        output_table[val_number] = {
            "c_shift": c_shift,
            "h_shift": h_shift
        }
    return output_table

执行后将得到预期结果:

{
    "val_number1": {"c_shift": c_shift1, "h_shift": h_shift1},
    "val_number2": {"c_shift": c_shift2, "h_shift": h_shift2},
    "val_number3": {"c_shift": c_shift3, "h_shift": h_shift3}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:16:03