Python遍历字典替换成绩为等级时报TypeError: '>='不支持str与int比较
报错原因分析
核心错误是你使用了两层不必要的嵌套循环,且循环过程中直接修改原字典的value类型,触发了类型不匹配的比较错误,具体拆解如下:
- 逻辑设计错误:你不需要两层循环。外层遍历字典的键,内层又遍历所有字典值,会导致每个键的value被多次覆盖,最终所有键的value都会被设置为最后一个成绩对应的等级,完全不符合需求。
- 类型错误触发原因:你在循环过程中直接把原字典的int类型成绩替换为字符串类型的等级。第一次外层循环处理第一个键时,内层循环就会把该键对应的值改为字符串,当第二轮外层循环启动,再次遍历
adict.values()时,列表里已经存在字符串类型的value,执行i >= 90的判断时,就会出现字符串与整型比较的类型错误,也就是你收到的报错。
修复后的代码
你只要遍历字典的键值对即可,不需要嵌套循环:
def letter_grades(adict): """ Parameter adict: the dictionary of grades Precondition: adict is a dictionary with string keys, int values """ for name, score in adict.items(): if score >= 90: adict[name] = 'A' elif score >= 80: adict[name] = 'B' elif score >= 70: adict[name] = 'C' elif score >= 60: adict[name] = 'D' else: adict[name] = 'F' return adict
如果你不想修改输入的原字典,可以新建字典存储结果后返回,避免对输入参数产生副作用。
内容的提问来源于stack exchange,提问作者Vr3527
相关产品推荐
相关产品推荐

