繁体   English   中英

如何将列表字典写入字符串而不是CSV文件?

[英]How to write a dictionary of lists to a string instead of CSV file?

stackoverflow问题回答将列表字典写入CSV文件。 我的用例是将类似的列表字典写入CSV字符串而不是文件。 如果我做了以下

csvfile += ",".join(csvdata.keys())
for values in csvdata.values():
    csvfile += ",".join(value for value in values) + "\n"

它给了我在不同行中扩展的所有列表。 相反,我正在寻找一个带字典键作为列标题和相同键值(在列表中)作为其列值的输出。

Input
{'ID' :['101','102'], 'Name': ['X','Y'],'Gender': ['M','F']}

Expected Output (In comma separated string)
ID,   Name, Gender
101,  X,    'M'
102,  Y,    'F'

Output with my code
ID, Name, Gender
101, 102,
X,   Y,
'M', 'F',

编辑#1:在此解释重复请求。 问题“ 如何将数据写入csv格式为字符串(而不是文件)? ”是针对不同的用例,我的问题是针对特定的用例。

csvdata.values()中的每个values都是其对应键/列的值列表,因此您实际上将表的列打印为行。

相反,通过zip值列表来构造行:

csvfile += ",".join(csvdata.keys()) + "\n"
for row in zip(*csvdata.values()):
    csvfile += ",".join(row) + "\n"

输出:

ID,Name,Gender
101,X,M
102,Y,F

我没有使用字符串进行操作(用逗号和换行符连接它们),而是建议使用csv模块io.String更加惯用和更清晰的方法:

import csv
import io


data = {'ID': ['101', '102'], 'Name': ['X', 'Y'], 'Gender': ['M', 'F']}

with io.StringIO() as output:
    writer = csv.writer(output)
    writer.writerow(data.keys())
    writer.writerows(zip(*data.values()))
    result = output.getvalue()
print(result)

这给出了:

ID,Name,Gender
101,X,M
102,Y,F


参考文献:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM