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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:42:16