如何在Python中控制JSON输出的换行与缩进格式
实现JSON输出中每个Lemma条目单独占一行
要让每个"lemma": {对应字典}单独占一行,标准json.dump的默认参数组合没法直接实现,因为它会对嵌套的字典/列表也进行换行缩进。可以通过手动构建JSON字符串的方式精准控制格式,具体步骤如下:
解决方案代码
替换原代码中写入JSON文件的部分,改用以下代码:
import json # 处理每个lemma条目,转成紧凑的键值对字符串 entries = [] for lemma, token_data in token_info.items(): # 将嵌套的字典转成无换行的紧凑JSON字符串 compact_data = json.dumps(token_data, ensure_ascii=False, separators=(',', ': ')) entries.append(f' "{lemma}": {compact_data}') # 拼接成完整的JSON结构 final_json = "{\n" + ",\n".join(entries) + "\n}" # 写入文件 with open('token_info.json', 'w', encoding='utf-8') as f: f.write(final_json)
说明
- 先用
json.dumps把每个lemma对应的嵌套字典转成无换行的紧凑格式,避免内部结构拆分换行; - 给每个键值对条目加上外层缩进(4个空格),再用逗号+换行连接所有条目;
- 最后包裹上JSON的顶层大括号,即可得到目标格式:每个lemma条目单独占一行,内部字典紧凑显示。
额外提醒
原代码中如果同一个lemma在语料中出现多次,后面的token数据会覆盖前面的(因为token_info[lemma] = current_token是直接赋值),如果需要保留所有出现的token信息,建议把值改成列表,比如token_info.setdefault(lemma, []).append(current_token)。
内容的提问来源于stack exchange,提问作者sparxy
相关产品推荐
相关产品推荐

