繁体   English   中英

编写字典列表以分隔 JSON

[英]Writing a List of Dictionaries to seperate JSONs

我确实有字典,每个值都是一个列表。

我想将单个项目写入单独的 JSON 文件。 例如

data_to_write = {"Names":["name1", "name2", "name3"], "email":["mail1", "mail2", "mail3"]}

现在我想要以下(近似)格式的 3 个 json,即data1.jsob, data2.json, data3.json

数据1.json

{
    Name: name1,
    email: mail1
}

数据2.json

{
    Name: name2,
    email: mail2
}

等等。

我目前的做法是


    for file_no in range(no_of_files):
        for count, (key, info_list) in enumerate(data_to_write.items()):
            for info in info_list:
                with open(
                     os.path.join(self.path_to_output_dir, str(file_no)) + ".json",
                     "a",
                ) as resume:
                    json.dump({key: info}, resume)

但这是错误的。 任何帮助表示赞赏。

您可以使用 pandas 为您完成工作。 将字典读入数据帧,然后迭代数据帧的行以生成每一行的 json:

import pandas as pd

data_to_write = {"Names":["name1", "name2", "name3"], "email":["mail1", "mail2", "mail3"]}
df = pd.DataFrame(data_to_write).rename(columns={'Names':'Name'})
for i in range(len(df)):
    jstr = df.iloc[i].to_json()
    with open(f"data{i+1}.json", "w") as f:
        f.write(jstr)

输出(每一行都在一个单独的文件中):

{"Name":"name1","email":"mail1"}
{"Name":"name2","email":"mail2"}
{"Name":"name3","email":"mail3"}

尝试:

import json

data_to_write = {
    "Names": ["name1", "name2", "name3"],
    "email": ["mail1", "mail2", "mail3"],
}

for i, val in enumerate(zip(*data_to_write.values()), 1):
    d = dict(zip(data_to_write, val))
    with open(f"data{i}.json", "w") as f_out:
        json.dump(d, f_out, indent=4)

这将写入data(1..3).json内容:

# data1.json
{
    "Names": "name1",
    "email": "mail1"
}

# data2.json
{
    "Names": "name2",
    "email": "mail2"
}

...
import json

data_to_write = {
    "Names": ["name1", "name2", "name3"],
    "email": ["mail1", "mail2", "mail3"],
}

for ind, val in enumerate(zip(*data_to_write.values())):
    jsn = dict(zip(data_to_write, val))
    print(jsn)

    with open("data{}.json".format(ind), "w") as f:
        f.write(json.dumps(jsn))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM