我有一个类似于以下示例的字典:
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()))
先谢谢了。
答案 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()))