将包含一些标量和一些数组值的字典编写为csv

时间:2019-02-24 13:25:55

标签: python csv dictionary

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

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()))

先谢谢了。

2 个答案:

答案 0 :(得分:0)

请勿声明名为dict的变量,因为这代表我们将在此处使用的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并将其保存为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)

然后您有了文件。

答案 1 :(得分:0)

您可以通过创建更常规的字典来做到这一点,在该字典中所有键都具有相同大小的列表。

 outputDict = { key: value if isinstance(value,list) else [value] for key,value in dict.items() }
 padding = [""] * max( len(value) for value in outputDict.values() )
 outputDict = { key: (value + padding)[:len(padding)] for key,value in outputDict.items() }
 writer.writerow(outputDict.keys())
 writer.writerows(zip(*outputDict.values()))