将Python字典写入CSV,其中keys = columns,values = rows

我有一个我希望能够在Excel中打开的字典列表,格式正确。 这是我迄今为止,使用csv:

list_of_dicts = [{'hello': 'goodbye'}, {'yes': 'no'}] out_path= "/docs/outfile.txt" out_file = open(ipath, 'wb') writer = csv.writer(ofile, dialect = 'excel') for items in list_of_dicts: for k,v in items.items(): writer.writerow([k,v]) 

显然,当我在Excel中打开输出时,它的格式如下所示:

 key value key value 

我想要的是这样的:

 key key key value value value 

我无法弄清楚如何做到这一点,所以帮助,将不胜感激。 另外,我希望列名是字典键,而不是默认的“A,B,C”等。很抱歉,如果这是愚蠢的。

谢谢

csv模块有一个DictWriter类,这在另一个SO答案中被很好地覆盖了。 关键的一点是,当你实例化DictWriter时,你需要知道你所有的列标题。 如果你的代码变成了,你可以从你的list_of_dicts构造字段名称列表

 list_of_dicts = [{'hello': 'goodbye'}, {'yes': 'no'}] out_path= "/docs/outfile.txt" out_file = open(out_path, 'wb') fieldnames = sorted(list(set(k for d in list_of_dicts for k in d))) writer = csv.DictWriter(out_file, fieldnames=fieldnames, dialect='excel') writer.writeheader() # Assumes Python >= 2.7 for row in list_of_dicts: writer.writerow(row) out_file.close() 

我构build字段名的方式会扫描整个list_of_dicts ,所以随着大小的增加,它会变慢。 您应该直接从数据源创buildfieldnames ,例如,如果数据源也是csv文件,则可以使用DictReader并使用fieldnames = reader.fieldnames

您也可以用一个调用writer.writerows(list_of_dicts)replacefor循环,并使用with block来处理文件closures,在这种情况下,您的代码将变成

 list_of_dicts = [{'hello': 'goodbye'}, {'yes': 'no'}] out_path= "/docs/outfile.txt" fieldnames = sorted(list(set(k for d in list_of_dicts for k in d))) with open(out_path, 'wb') as out_file: writer = csv.DictWriter(out_file, fieldnames=fieldnames, dialect='excel') writer.writeheader() writer.writerows(list_of_dicts) 

您需要编写两个单独的行,一个使用键,一个使用值,而不是:

 writer = csv.writer(ofile, dialect = 'excel') writer.writerow([k for d in list_of_dicts k in d]) writer.writerow([v for d in list_of_dicts v in d.itervalues()]) 

这两个列表parsing首先提取所有键,然后从input列表中的字典中提取所有值,将这些键合并成一个列表以写入CSV文件。