Python 3.8列表索引类型错误求助:提取合并字典中的游戏名称
解决字典合并后提取游戏名及统计次数的问题
首先来说你遇到的报错原因:你在循环里写了datalist[i]['name'],但这里的i已经是列表里的单个字典(比如yourdict2),不是整数索引,所以Python会报错说列表不能用字典当索引。而且从你打印的z结构来看,每个子字典里还有一层键(比如'50'),所以得先拿到这层键对应的value才能取到name。
第一步:正确提取所有游戏名称
先修改你的遍历代码,改成这样:
z = {} z['games'] = [yourdict2, yourdict3] datalist = z['games'] # 提取所有游戏名称 game_names = [] for game_dict in datalist: # 遍历每个子字典里的value(因为每个子字典的键是类似'50'这种,我们需要它对应的内容) for item in game_dict.values(): game_names.append(item['name']) print(item['name'])
这样就能正确打印每个游戏的name字段,同时把所有名称存到game_names列表里,方便后续统计。
第二步:统计游戏名称的出现次数
要统计次数,Python的collections.Counter是最方便的工具,不用自己手动计数:
from collections import Counter # 统计次数 name_counts = Counter(game_names) # 打印结果,比如: print("游戏名称出现次数:") for name, count in name_counts.items(): print(f"{name}: {count}次")
额外说明:关于字典合并的小优化
你用列表存两个字典的方式确实能避免键重复覆盖,这思路是对的。如果之后还有更多字典要合并,直接用z['games'].append(yourdict4)就可以,很灵活。
如果你的子字典结构固定(每个子字典只有一个键值对,比如只有'50'这种单个键),也可以简化提取步骤,比如用next(iter(game_dict.values()))直接拿到唯一的value,不用循环:
for game_dict in datalist: game_item = next(iter(game_dict.values())) game_names.append(game_item['name'])
内容的提问来源于stack exchange,提问作者Kosta
相关产品推荐
相关产品推荐

