Python中遍历字典值时,如何检查变量类型并累加数值类型值
解决Python字典中数值类型值的累加问题
原代码直接遍历字典值进行累加会触发TypeError,因为字典中包含None、字符串这类无法与整数相加的类型。要实现仅累加数值类型的值,有以下几种可行方案:
方案一:类型判断过滤
使用isinstance()明确检查值是否为整数或浮点数,符合条件再累加:
total = 0 grades = { 'Math': 90, 'Science': None, 'English': 85, 'History': 'A', 'Art': 88 } for grade in grades.values(): if isinstance(grade, (int, float)): total += grade print(total) # 输出:263
isinstance(grade, (int, float))会同时匹配整数和浮点数类型,自动过滤掉非数值类型的元素。
方案二:异常捕获跳过
如果不确定值的类型范围,可以用try-except捕获累加时的异常,跳过无法累加的元素:
total = 0 grades = { 'Math': 90, 'Science': None, 'English': 85, 'History': 'A', 'Art': 88 } for grade in grades.values(): try: total += grade except (TypeError, ValueError): continue print(total) # 输出:263
这种方式不需要提前定义类型,尝试累加操作,失败则跳过当前元素,适合值类型复杂的场景。
方案三:覆盖所有数值类型(含扩展类型)
如果需要支持更多数值类型(比如复数、numpy数值类型),可以导入numbers模块,用numbers.Number作为判断依据:
import numbers total = 0 grades = { 'Math': 90, 'Science': None, 'English': 85, 'History': 'A', 'Art': 88 } for grade in grades.values(): if isinstance(grade, numbers.Number): total += grade
这个判断会覆盖所有Python标准数值类型,兼容性更强。
内容的提问来源于stack exchange,提问作者Vivid Programmer
相关产品推荐
相关产品推荐

