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

Python中字典元素与列表相乘结果被覆盖的问题求助

字典元素相乘结果被覆盖的问题解决

问题背景

需要实现:将字典num的每个元素与列表x中的元素分别相乘,结果存入新字典resu,以num的键作为resu的键。但运行代码后,num最后一个元素的计算结果覆盖了之前所有元素的结果。

原代码

def mult(num, x):
  return num * x

num = {'one':1, 'two':2, 'three':3}
x = [11, 12, 13, 14, 15, 16, 17]
r = dict()
resu = dict()

for k, n in num.items():
  for i in x:
    prod = mult(n, i)
    r[i] = prod
  resu[k] = r

resu

当前输出

{'one': {11: 33, 12: 36, 13: 39, 14: 42, 15: 45, 16: 48, 17: 51},
 'two': {11: 33, 12: 36, 13: 39, 14: 42, 15: 45, 16: 48, 17: 51},
 'three': {11: 33, 12: 36, 13: 39, 14: 42, 15: 45, 16: 48, 17: 51}}

期望输出

{'one': {11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17},
  'two': {11: 22, 12: 24, 13: 26, 14: 28, 15: 30, 16: 32, 17: 34},
  'three': {11: 33, 12: 36, 13: 39, 14: 42, 15: 45, 16: 48, 17: 51}}

问题原因

字典r定义在外层循环之外,所有num的键最终都指向同一个字典对象。每次内层循环都会修改这个r的内容,最后一次循环(对应three:3)的结果会覆盖之前所有修改,导致resu中所有键都引用同一个最终的r字典。

解决方案

方案1:每次外层循环新建字典

在每次遍历num的键值对时,重新创建一个空字典r,确保每个键对应独立的字典:

def mult(num, x):
  return num * x

num = {'one':1, 'two':2, 'three':3}
x = [11, 12, 13, 14, 15, 16, 17]
resu = dict()

for k, n in num.items():
  r = dict()  # 每次循环初始化新字典
  for i in x:
    prod = mult(n, i)
    r[i] = prod
  resu[k] = r

print(resu)

方案2:使用字典推导式简化代码

用嵌套字典推导式直接生成结果,更简洁高效:

def mult(num, x):
  return num * x

num = {'one':1, 'two':2, 'three':3}
x = [11, 12, 13, 14, 15, 16, 17]

resu = {k: {i: mult(n, i) for i in x} for k, n in num.items()}

print(resu)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:19