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

如何用Python将嵌套JSON转为含0/1值的CSV?适配扩展避免硬编码

解决JSON转0/1值CSV的动态适配方案

嘿,我来帮你搞定这个JSON转CSV的需求!你的核心诉求是把每个slot的物品列表转成对应物品的0/1标记,还要能适配物品和slot的扩展、避免硬编码对吧?我给你一套既简洁又符合最佳实践的方案,完全不用纠结多层循环的问题。

思路拆解

  1. 动态提取所有物品:从JSON的所有slot里自动收集唯一物品作为CSV表头,不用手动列出来
  2. 用DictWriter简化写入:Python的csv.DictWriter可以自动根据表头匹配列,完美适配新增的物品或slot
  3. 0/1值快速生成:利用集合的in操作判断物品是否存在,一行代码搞定值的赋值

完整代码实现

import json
import csv

# 读取JSON inventory文件
with open('equip_inventory.json', 'r') as json_file:
    inventory_dict = json.load(json_file)

# 收集所有唯一物品,去重后排序(排序可选,保证表头顺序稳定)
all_unique_items = sorted({item for items_list in inventory_dict.values() for item in items_list})

# 定义CSV表头:第一列是inventory,后面跟着所有物品
csv_columns = ['inventory'] + all_unique_items

# 写入CSV文件
with open('equip_inventory.csv', 'w', newline='') as csv_file:
    # 初始化DictWriter,指定表头
    writer = csv.DictWriter(csv_file, fieldnames=csv_columns)
    writer.writeheader()  # 先写入表头

    # 遍历每个slot,生成对应的行数据
    for slot_name, slot_items in inventory_dict.items():
        row_data = {'inventory': slot_name}
        # 给每个物品列赋值1或0
        for item in all_unique_items:
            row_data[item] = 1 if item in slot_items else 0
        writer.writerow(row_data)

方案优势

  • 完全动态适配:不管新增多少物品(比如e、f、g)或者slot(slot5、slot6),代码都能自动识别并处理,完全不需要硬编码行列
  • 简洁高效:用集合推导式收集物品,比多层循环手动去重更简洁;DictWriter自动处理列匹配,避免手动拼接列表的出错风险
  • 可维护性强:逻辑清晰,每个步骤的职责明确,后续修改需求也很容易调整

测试结果

用你提供的equip_inventory.json测试,生成的CSV完全符合预期:

inventory,a,b,c,d
slot1,1,1,0,0
slot2,0,0,1,1
slot3,1,1,1,0
slot4,0,0,0,1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:15:34