首页 > 解决方案 > 将包含一些标量和一些数组值的字典写入 csv

问题描述

我有一个类似于以下示例的字典:

dict = {key1: value1, key2: [arrayValue1, arrayValue2]}

我想将其写入 CSV 文件,格式如下:

key1     key2
value1   arrayValue1
         arrayValue2

搜索类似的问题,如果所有值都是标量或数组,我找到了编写字典的方法,但如果值是两者的组合,我还没有找到答案。

我有以下用于编写标量值的代码:

with open(filename, 'w') as f:  
        w = csv.DictWriter(f, dict.keys())
        w.writeheader()
        w.writerow(dict)

以及以下用于写入数组值的代码:

with open(filename, "w") as outfile:
        writer = csv.writer(outfile)
        writer.writerow(dict.keys())
        writer.writerows(zip(*dict.values()))

提前致谢。

标签: pythoncsvdictionary

解决方案


不要声明变量dict,因为 this 代表我们将在这里使用的 Python 内置函数。而是使用诸如dct.

dct = {"key1": "value1", "key2": ["arrayValue1", "arrayValue2"]}

首先,将每个标量放入一个数组中。

myvalues = [ x if isinstance(x, list) else [x] for x in dct.values() ]

接下来,使每个数组都与最大数组一样长。用空字符串填补空白。

maxlength = max([len(x) for x in myvalues])
myvalues = [ x + (maxlength - len(x))*[""] for x in myvalues ]

现在您可以重建您的字典,将其转换为 pandas DataFrame 并将此 DataFrame 保存为 CSV 文件。

import pandas as pd
dct = dict(zip(dct.keys(), myvalues))
df = pd.DataFrame.from_dict(dct)
df.to_csv("your_filename_goes_here.csv", index=False)

然后你就有了你的文件。


推荐阅读