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

Python嵌套循环向字典添加结果异常:仅最后项赋值或全值重复求助

问题分析与解决方法

错误原因拆解

  1. 仅最后一个键有值的问题
    第一个代码中,n[i] = a语句位于外层循环之外。当循环执行完毕时,i的值已经是list1的最后一个元素60,因此只有60这个键被赋值,其他键保持初始化时的空列表状态。

  2. 所有键值完全相同的问题
    第二个代码中,列表a是在所有循环外部定义的单一对象。每次外层循环都会往同一个a中追加元素,而字典的所有键都指向这个同一个列表引用(因为列表是可变类型,赋值传递的是内存地址),最终所有键对应的都是同一个列表的内容。


修正后的代码实现

方法1:直接操作字典内的列表(推荐)

无需额外创建临时列表,直接利用字典中已初始化的列表进行元素追加:

list1 = [10,20,30,40,50,60]
list2 = [1,2,3,4,5,6]

# 初始化字典,每个键对应空列表
n = {k: [] for k in list1}

for i in list1:
    for j in list2:
        b = 10 * j + i
        # 直接向当前键对应的列表添加元素
        n[i].append(b)

print(n)

方法2:每次外层循环创建新列表

每次遍历list1的元素时,都新建一个临时列表,避免多个键共享同一个列表引用:

list1 = [10,20,30,40,50,60]
list2 = [1,2,3,4,5,6]

n = {k: [] for k in list1}

for i in list1:
    # 每次外层循环都创建新的空列表
    temp_list = []
    for j in list2:
        b = 10 * j + i
        temp_list.append(b)
    # 将新列表赋值给对应键
    n[i] = temp_list

print(n)

两种方法都能得到你期望的输出:

{10: [20, 30, 40, 50, 60, 70], 20: [30, 40, 50, 60, 70, 80], 30: [40, 50, 60, 70, 80, 90], 40: [50, 60, 70, 80, 90, 100], 50: [60, 70, 80, 90, 100, 110], 60: [70, 80, 90, 100, 110, 120]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:21:01