将嵌套字典列表读写至CSV文件(Python)

2 投票
3 回答
4616 浏览
提问于 2025-04-16 00:56

我有一个数据结构,长得像这样:

data  =[
{'key_1': { 'calc1': 42, 'calc2': 3.142 } },
{'key_2': { 'calc1': 123.4, 'calc2': 1.414 } },
{'key_3': { 'calc1': 2.718, 'calc2': 0.577 } }
]

我想把这些数据保存到一个CSV文件里,并且能够从这个文件中加载数据,格式要像下面这样:

key,    calc1,   calc2   <- header
key_1,  42,      3.142   <- data rows
key_2,  123.4,   1.414
key_3,  2.718,   0.577

用Python有什么好的方法可以把这个数据结构读入或保存到上面那种CSV文件里呢?

3 个回答

-1

我觉得最简单的方法就是先把字典转换成一个 pandas 数据框,然后再很方便地转成 csv 文件。

import pandas as pd    
df = pd.DataFrame.from_dict(data, orient='index') # it is either ‘columns’ or ‘index’ (simple transpose)
    df.to_csv('filepath/name.csv')

要把文件再加载回字典的形式

df.to_csv('filepath/name.csv')
data_dict = df.to_dict()

如果情况比较复杂,可以看看 pandas 的文档,里面有详细的说明:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_dict.htmlhttp://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_dict.html

6

这里给大家展示一个使用csv模块的版本:

from csv import DictWriter

data  =[
{'key_1': { 'calc1': 42, 'calc2': 3.142 } },
{'key_2': { 'calc1': 123.4, 'calc2': 1.414 } },
{'key_3': { 'calc1': 2.718, 'calc2': 0.577 } }
]

with open('test.csv', 'wb') as f:
    writer = DictWriter(f, ['key', 'calc1', 'calc2'])
    writer.writerow(dict(zip(writer.fieldnames, writer.fieldnames))) # no automatic header :-(
    for i in data:
        key, values = i.items()[0] # each dict in data contains only one entry
        writer.writerow(dict(key=key, **values)) # first make a new dict merging the key and the values
5

我觉得用 csv 模块可能不太行,因为你的需求和结构有些特别。不过,你可以很简单地手动写出来:

>>> with open('test.txt', 'w') as f:
    f.write(','.join(['key', 'calc1', 'calc2']) + '\n')
    f.writelines('{},{},{}'.format(k, *v.values()) + '\n' for l in data for k,v in l.items())

撰写回答