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

时间:2019-04-29 09:15:54

标签: python csv dictionary

stackoverflow question答案将列表字典写入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:在此处解释重复的请求。问题“ How do I write data into csv format as string (not file)? ”用于不同的用例,而我的问题仅针对特定的用例。

2 个答案:

答案 0 :(得分:4)

this.appAvailability.check('com.facebook.katana').then( () => {// facebook is installed window.open('fb://page/my_app_123_id’, '_system', 'location=no'); }, () => {//no: boolean // lead to website instead of app if facebook app does not exists window.open('https://www.facebook.com/my_app_123/', '_blank', 'location=yes'); } ); 中每个values都是其对应键/列的值的列表,因此您可以有效地将表的列打印为行。

相反,通过csvdata.values()设置值列表来构造行:

zip

输出:

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

答案 1 :(得分:0)

我建议使用csv moduleio.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


参考文献: