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

如何用Python创建字典列表?解决JSON序列化多列表合并问题

解决JSON文件中多个独立列表的问题

看起来你是因为每次处理完一个文件就把单元素列表直接写入文件,导致最终文件里是多个独立的JSON数组拼接在一起,而不是一个包含所有记录的单一数组。咱们来一步步解决这个问题:

问题根源

你当前的逻辑大概是这样的:每次处理一个文件,返回一个只包含该文件结果的列表,然后直接把这个列表序列化后追加到文件里。比如两次写入就会得到:

[{"file Name": "test1.txt", ...}][{"file Name": "test2.txt", ...}]

这不仅不符合你想要的格式,甚至不是有效的JSON(JSON根只能是一个对象或数组)。

正确的解决思路

核心是先把所有文件的结果收集到一个大列表里,然后再一次性把这个大列表序列化为JSON写入文件,而不是分批写入小列表。

方案1:让函数返回单个字典(推荐)

如果可以修改你的处理函数,让它直接返回单个字典而不是单元素列表,然后把所有字典收集到列表中:

import json

def process_single_file(filename, searched_word):
    # 模拟你的文件处理逻辑,返回单个字典
    count = 1  # 这里替换成实际的计数逻辑
    return {
        "file Name": filename,
        "searched Word": searched_word,
        "number of occurence": count
    }

# 收集所有结果到一个大列表
all_results = []
all_results.append(process_single_file("test1.txt", "th"))
all_results.append(process_single_file("test2.txt", "th"))

# 一次性写入整个列表到JSON文件
with open("output.json", "w", encoding="utf-8") as f:
    json.dump(all_results, f, indent=4)  # indent=4让JSON格式更易读

方案2:保留函数返回列表的逻辑

如果不能修改函数,必须让它返回列表,那就用extend()方法把每个小列表里的元素合并到大列表中:

import json

def process_single_file(filename, searched_word):
    # 原函数返回单元素列表
    count = 1
    return [{
        "file Name": filename,
        "searched Word": searched_word,
        "number of occurence": count
    }]

all_results = []
# 用extend把小列表里的字典添加到大列表
all_results.extend(process_single_file("test1.txt", "th"))
all_results.extend(process_single_file("test2.txt", "th"))

with open("output.json", "w", encoding="utf-8") as f:
    json.dump(all_results, f, indent=4)

最终效果

执行上面的代码后,你的JSON文件会变成你期望的格式:

[
    {
        "file Name": "test1.txt",
        "searched Word": "th",
        "number of occurence": 1
    },
    {
        "file Name": "test2.txt",
        "searched Word": "th",
        "number of occurence": 1
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:46:25