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

如何修改字典的键与值?Python元组元素统计字典代码报错求助

问题排查与修正方案

首先,你的代码里有一个明显的错误导致运行报错:在循环更新计数的时候,你写了answer[x] + 1,但x是整个元组(比如("Best Picture", "Parasite")),而你的字典键是元组的第二个元素(比如"Parasite"),所以这里会触发KeyError——字典里根本没有以元组为键的条目。

修正后的基础版本代码

def movie_awards(results):
    """ 忽略每个元组中的第一个元素,统计第二个元素的出现次数 """
    # 初始化字典:键为每个子元组的第二个元素,初始值设为0
    answer = {x[1]: 0 for x in results}
    # 遍历原集合,更新每个键的计数
    for x in results:
        # 必须用元组的第二个元素作为键来访问字典
        answer[x[1]] = answer[x[1]] + 1
    return answer  # 用return替代print,让函数更通用(可返回结果供其他代码调用)

# 定义输入的元组集合
result = {("Best Picture", "Parasite"),
("Best Actor", "Joker"),
("Best Actress", "Judy"),
("Best Sound Editing", "Ford v Ferrari"),
("Best Sound Editing", "1917"),
("Best Original Score", "Joker"),
("Best Costume Design", "Little Women"),
("Best Visual Effects", "Little Women"),
("Best Director", "Parasite")}

# 调用函数并打印结果
print(movie_awards(result))

更简洁的优化实现

其实Python标准库的collections.Counter可以直接帮你完成统计工作,不用手动初始化字典和写循环,代码会更简洁高效:

from collections import Counter

def movie_awards(results):
    """ 忽略每个元组中的第一个元素,统计第二个元素的出现次数 """
    # 提取所有元组的第二个元素,直接用Counter完成统计
    return Counter(x[1] for x in results)

result = {("Best Picture", "Parasite"),
("Best Actor", "Joker"),
("Best Actress", "Judy"),
("Best Sound Editing", "Ford v Ferrari"),
("Best Sound Editing", "1917"),
("Best Original Score", "Joker"),
("Best Costume Design", "Little Women"),
("Best Visual Effects", "Little Women"),
("Best Director", "Parasite")}

print(movie_awards(result))

两种方式运行后都会输出正确的统计结果:

{'Parasite': 2, 'Joker': 2, 'Judy': 1, 'Ford v Ferrari': 1, '1917': 1, 'Little Women': 2}

额外小提示

  • 你之前写的results = list(results)完全没必要,集合本身就可以直接遍历,删掉这一行不会影响功能。
  • 函数里用return代替print是更好的编程习惯,这样函数的职责更清晰——只负责计算结果,而不是输出结果,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:12:32