正在将包含一些标量值和一些数组值的字典写入cs

2024-03-28 13:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本类似以下示例的词典:

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

提前谢谢。你知道吗


Tags: csv代码aswith数组openfilenamedict
2条回答

您可以通过创建一个更规则的字典来实现这一点,其中所有键都具有相同大小的列表。你知道吗

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

不要声明名为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 ]

现在,您可以重建字典,将其转换为一个数据帧,并将此数据帧保存为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)

然后你就有了你的档案。你知道吗

相关问题 更多 >