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

Python字典值求倒数:报错原因分析与正确实现方法问询

字典值倒数计算问题解决

问题背景

给定字典:weights = {"A":16, "B": 3, "C": 5},需要计算每个值的倒数,期望输出:weights_dict_reci = {"A":0.0625, "B": 0.3333333, "C": 0.2}(注:原期望输出中的逗号为小数点笔误)。尝试以下两种代码均报错:

  1. 字典推导式:
    weights_dict_reci = {value: 1 / weights_dict[value] for value in weights_dict}
  2. 循环修改:
for key in weights_dict:
    weights_dict[key] = 1 / weights_dict[key]

错误信息:unsupported operand type(s) for /: 'int' and 'function'


1. 报错原因

  • 变量名混淆:你代码中使用的weights_dict并非定义好的weights字典,而是被错误赋值成了一个函数(比如之前定义过同名函数def weights_dict(): ...,或把某个函数对象赋值给了weights_dict)。当执行1 / weights_dict[value]时,weights_dict[value]返回的是函数类型,整数与函数无法执行除法运算,因此触发报错。
  • 额外逻辑问题:第一种推导式的键名写法冗余——遍历字典默认拿到的是键,你写value: 1/...会把键作为新字典的键名(语法无错但逻辑多余),正确写法应直接用键对应值的倒数。

2. 正确计算方法

方法一:字典推导式(推荐,不修改原字典)

通过推导式直接生成新字典,清晰高效:

weights = {"A":16, "B": 3, "C": 5}
weights_dict_reci = {key: 1 / value for key, value in weights.items()}

若不想用items(),也可遍历键再取值:

weights_dict_reci = {key: 1 / weights[key] for key in weights}

方法二:循环修改原字典(或复制后修改)

如需直接修改原字典:

weights = {"A":16, "B": 3, "C": 5}
for key in weights:
    weights[key] = 1 / weights[key]
# 此时weights即为存储倒数的字典;若需保留原字典,先复制再修改
weights_copy = weights.copy()
for key in weights_copy:
    weights_copy[key] = 1 / weights_copy[key]
weights_dict_reci = weights_copy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:27:18