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

如何导出Python字典到JSON文件时让每个键值对单独占行且列表不换行

解决方案

Python 内置 json 模块的 indent 参数会对所有嵌套结构统一应用换行缩进,无法单独控制列表不换行,以下两种方案均不依赖第三方库:

方案1:手动拼接JSON(适合顶层字典值均为一维列表的场景)

逻辑是单独序列化每个列表为单行字符串,再手动拼接成完整JSON结构,结果完全可控:

import json

d = {"car": ["toyota", "honda"], "bus": ["hackney", "bombardier"]}
indent_space = "   "  # 对应你需要的缩进空格数,示例为3个空格
kv_lines = []

for key, value_list in d.items():
    # 序列化列表为无换行的JSON字符串
    list_json = json.dumps(value_list)
    kv_lines.append(f'{indent_space}"{key}": {list_json}')

# 拼接完整JSON,自动补充键值对之间的逗号,保证JSON合法性
final_json = "{\n" + ",\n".join(kv_lines) + "\n}"

# 写入文件
with open("output.json", "w", encoding="utf-8") as f:
    f.write(final_json)

输出效果:

{
   "car": ["toyota", "honda"],
   "bus": ["hackney", "bombardier"]
}

方案2:正则格式化(适合存在嵌套、所有列表均需单行展示的场景)

先用indent生成带换行的标准格式化JSON,再通过正则把列表内部的换行和多余空格替换为单个空格:

import json
import re

d = {"car": ["toyota", "honda"], "bus": ["hackney", "bombardier"]}
# 先生成带缩进的原始JSON
raw_json = json.dumps(d, indent=3, ensure_ascii=False)
# 正则匹配所有方括号包裹的列表内容,替换内部空白
processed_json = re.sub(
    r"\[(.+?)\]",
    lambda match: "[" + re.sub(r"\s+", " ", match.group(1)) + "]",
    raw_json,
    flags=re.DOTALL
)

# 写入文件
with open("output.json", "w", encoding="utf-8") as f:
    f.write(processed_json)

注意:你示例中给出的期望输出缺少键值对之间的逗号,属于非法JSON格式,上述两种方案生成的结果会自动补充逗号,符合JSON规范。

内容的提问来源于stack exchange,提问作者markovv.sim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:06:04