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

计算各玩家总分时触发TypeError错误,求问题分析与解决

错误原因分析
  • 遍历方式错误:原代码中for key,value in a:的写法完全错误。a是由字典组成的列表,直接迭代列表元素时,默认会迭代字典的键,导致key依次取到'name'和'score',value则是对应的字符串(如'Mike')或数字,后续累加时就会出现整数和字符串相加的矛盾,触发TypeError。
  • 逻辑判断冗余且错误:原代码用elif key in s处理累加,这会导致只有当键已存在时才执行累加,但实际上不管键是否存在,都应该执行累加操作,初始化只是为了避免键不存在的报错。
解决方法

方法一:修正遍历与判断逻辑

a=[
    {'name': 'Mike', 'score': 10},
    {'name': 'Mike', 'score': 8},
    {'name': 'Mike', 'score': 6},
    {'name': 'John', 'score': 7},
    {'name': 'John', 'score': 8},
    {'name': 'John', 'score': 5},
    {'name': 'John', 'score': 8},
    {'name': 'Tom', 'score': 8},
    {'name': 'Tom', 'score': 9}
]

s = {}
for player in a:
    name = player['name']
    score = player['score']
    if name not in s:
        s[name] = 0
    s[name] += score  # 无需elif,直接累加
print(s)

方法二:使用字典get()方法简化代码

dict.get(key, default)可直接获取键对应的值,不存在则返回默认值,省去判断逻辑:

a=[
    {'name': 'Mike', 'score': 10},
    {'name': 'Mike', 'score': 8},
    {'name': 'Mike', 'score': 6},
    {'name': 'John', 'score': 7},
    {'name': 'John', 'score': 8},
    {'name': 'John', 'score': 5},
    {'name': 'John', 'score': 8},
    {'name': 'Tom', 'score': 8},
    {'name': 'Tom', 'score': 9}
]

s = {}
for player in a:
    name = player['name']
    s[name] = s.get(name, 0) + player['score']
print(s)

方法三:用collections.defaultdict更简洁

借助collections模块的defaultdict指定默认值类型,无需手动初始化:

from collections import defaultdict

a=[
    {'name': 'Mike', 'score': 10},
    {'name': 'Mike', 'score': 8},
    {'name': 'Mike', 'score': 6},
    {'name': 'John', 'score': 7},
    {'name': 'John', 'score': 8},
    {'name': 'John', 'score': 5},
    {'name': 'John', 'score': 8},
    {'name': 'Tom', 'score': 8},
    {'name': 'Tom', 'score': 9}
]

s = defaultdict(int)
for player in a:
    s[player['name']] += player['score']
# 需要普通字典的话用dict(s)转换
print(dict(s))

以上三种方法运行后都会得到预期结果:{'Mike': 24, 'John': 28, 'Tom': 17}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:47:35