Python:如何从字典列表创建 csv 字符串(无文件)?

Kai*_*ner 5 python csv string dictionary list

在 Python 中,我有一个像这样的字典列表:

[
    {
        "col2": "2",
        "id": "1",
        "col3": "3",
        "col1": "1"
    },
    {
        "col2": "4",
        "id": "2",
        "col3": "6",
        "col1": "2"
    },
    {
        "col1": "1",
        "col2": "4",
        "id": "3",
        "col3": "7"
    }
]
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为 csv 格式的字符串,包括标题行。(对于初学者来说,我们不关心列和行分隔符......)所以,理想的结果是:

id,col1,col2,col3
1,1,2,3
2,2,4,6
3,1,4,7
Run Code Online (Sandbox Code Playgroud)

(“理想情况下”,因为列顺序并不重要;不过,先有“id”列会很好......)

我搜索过 SOF,有很多类似的问题,但答案总是涉及使用 csv.DictWriter 创建 csv文件。我不想创建文件,我只想那个字符串!

当然,我可以循环遍历列表,并在该循环内循环遍历字典键,并以这种方式使用字符串操作创建 csv 字符串。但肯定有一些更优雅、更有效的方法来做到这一点吗?

另外,我知道 Pandas 库,但我试图在非常有限的环境中执行此操作,在该环境中我更愿意仅使用内置模块。

ikk*_*kuh 7

您可以使用io.StringIO写入“字符串”而不是文件。使用 的示例,csv.DictWriter我们得到以下代码:

import csv
import io

data = [...]  # your list of dicts

with io.StringIO() as csvfile:
    fieldnames = ['id', 'col1', 'col2', 'col3']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    for row in data:
        writer.writerow(row)
    print(csvfile.getvalue())
Run Code Online (Sandbox Code Playgroud)