Python嵌套循环向字典添加结果异常:仅最后项赋值或全值重复求助
问题分析与解决方法
错误原因拆解
仅最后一个键有值的问题
第一个代码中,n[i] = a语句位于外层循环之外。当循环执行完毕时,i的值已经是list1的最后一个元素60,因此只有60这个键被赋值,其他键保持初始化时的空列表状态。所有键值完全相同的问题
第二个代码中,列表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
相关产品推荐
相关产品推荐

