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

如何移除字典外层大括号,或实现将多个字典键值对合并后写入JSON文件?

解决JSON输出结构问题:合并多个字典为单一字典

你的问题核心在于初始数据结构选错了——你用了列表来存储每个文件的字典,导致最终输出是包含多个独立字典的列表;而你需要的是一个包含所有文件键值对的单一字典。以下是具体的修正方案:

问题根源分析

原来的代码里有两个关键问题:

  • data = [] 是列表类型,每次循环用data.append(listTest)把单个文件的字典作为列表元素添加,最终形成[ {文件1}, {文件2}, ... ]的嵌套结构,这和你要的单一字典不符。
  • size_of_img被转成了字符串,而你期望的是数字类型的文件大小。

修正后的完整代码

import os
import cv2

# 初始化data为字典,而非列表
data = {}

for x in range(0, len(directory_files)): 
    # 用os.path.join拼接路径,适配不同操作系统的路径分隔符
    img_path = os.path.join("Data", directory_files[x])
    img_filename = directory_files[x]
    # 直接获取整数类型的文件大小,去掉多余的str()转换
    img_size = os.stat(img_path).st_size
    # 生成唯一的父级键
    parent_tag = img_filename + str(img_size)
    
    # 构造当前文件的完整字典结构
    file_entry = {
        'filename': img_filename,
        'size': img_size,
        'regions': [],
        'file_attributes': {
            'caption': '',
            'public_domain': 'no',
            'image_url': ''
        }
    }
    
    # 将当前文件的键值对直接存入data大字典
    data[parent_tag] = file_entry

# 后续写入JSON文件的示例(按需使用)
# import json
# with open('output.json', 'w', encoding='utf-8') as f:
#     json.dump(data, f, indent=4, ensure_ascii=False)

关键修改说明

  1. 切换数据结构:把data从列表改为字典,这样可以直接存储多个键值对,完美匹配你想要的输出结构。
  2. 直接赋值键值对:不再用append添加整个字典到列表,而是通过data[parent_tag] = file_entry,把每个文件的字典作为大字典的一个键值对存入,操作更直观高效。
  3. 修正文件大小类型:去掉str()转换,让size字段保持整数类型,和你期望的输出一致。
  4. 路径健壮性优化:用os.path.join拼接文件路径,避免Windows和Linux系统的路径分隔符冲突,代码更通用。

修改后,最终的data就是你想要的单一字典结构,写入JSON文件后,就能得到没有外层列表和多余大括号的目标输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:47:29