JSON文件统计craft次数遇KeyError问题及计数实现求助
JSON数据处理与问题解决
一、先搞懂JSON是什么
JSON是一种键值对结构的文本数据格式,和Python里的字典逻辑类似,但本质是纯文本。常见的JSON结构有两种:
- 列表型:外层是数组(对应Python的列表),每个元素是字典,比如:
[ {"id": 1, "craft": "rocket"}, {"id": 2, "craft": "plane"}, {"id": 3, "craft": "rocket"} ]
- 嵌套字典型:外层是字典,里面包含列表或其他子字典,比如:
{"records": [ {"id": 1, "craft": "rocket"}, {"id": 2, "craft": "plane"} ]}
你碰到的KeyError: 'craft',核心原因是直接在最外层的data里找craft键,但这个键根本不在最外层,而是嵌套在子元素里。
二、解决KeyError问题
先确认你的JSON结构,读取后先打印数据类型和内容:
import json from pprint import pprint # 读取JSON文件 with open('你的文件名.json', 'r') as f: data = json.load(f) # 查看数据类型和结构 print(type(data)) pprint(data)
如果输出类型是<class 'list'>,说明data是列表,每个元素才是带craft键的字典;如果是<class 'dict'>,那得先找到包含craft的子列表(比如上面例子里的records键)。
三、统计不同craft的数量(目标结果为2)
根据常见的JSON结构,给两种可行的统计方法:
方法1:用集合自动去重
craft_list = [] for item in data: # 先判断item里有craft键,避免报错 if 'craft' in item: craft_list.append(item['craft']) # 集合去重后取长度就是不同craft的数量 unique_craft_num = len(set(craft_list)) print(unique_craft_num) # 输出2
方法2:用字典统计(还能看每个craft的出现次数)
craft_count_dict = {} for item in data: if 'craft' in item: craft_name = item['craft'] if craft_name in craft_count_dict: craft_count_dict[craft_name] += 1 else: craft_count_dict[craft_name] = 1 # 不同craft的数量等于字典键的数量 unique_craft_num = len(craft_count_dict) print(unique_craft_num) # 输出2 # 额外查看每个craft的出现次数 print(craft_count_dict)
如果你的JSON是嵌套字典型(比如外层有records键),只需要把循环改成for item in data['records']即可。
内容的提问来源于stack exchange,提问作者gillrilla
相关产品推荐
相关产品推荐

