如何修改字典的键与值?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
相关产品推荐
相关产品推荐

