Python字典值求倒数:报错原因分析与正确实现方法问询
字典值倒数计算问题解决
问题背景
给定字典:weights = {"A":16, "B": 3, "C": 5},需要计算每个值的倒数,期望输出:weights_dict_reci = {"A":0.0625, "B": 0.3333333, "C": 0.2}(注:原期望输出中的逗号为小数点笔误)。尝试以下两种代码均报错:
- 字典推导式:
weights_dict_reci = {value: 1 / weights_dict[value] for value in weights_dict} - 循环修改:
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
相关产品推荐
相关产品推荐

