将字典列表写入CSV,每个字典的值都在新列中

时间:2015-06-08 16:27:31

标签: python excel csv dictionary

原谅我。我是Python的新手。

我有一个字典列表,我想写一个Excel电子表格。我确切地知道每个字典将包含多少个键,每个字典将具有相同的键。我想通过我的许多字典获取A列中的键和B列中的值。到目前为止我的代码:

for each in stock_data:
    with open('output.csv', 'wb') as output:
        writer = csv.writer(output)
        for key, value in each.iteritems():
            writer.writerow([key, value])

但是,每次迭代都会覆盖前一次迭代。在此先感谢您的帮助。

编辑:在那些花时间回答的人的帮助下,我最终得到了这个(字典的值是元组):

with open('output.csv', 'wb') as output:
fieldnames = ['Volume', 'Symbol', 'Adj_Close', 'High', 'Low', 'Date', 'Close', 'Open']
writer = csv.DictWriter(output, fieldnames=fieldnames)
writer.writeheader()
writer = csv.writer(output)

for each in stock_data:
    temp_list = []
    for value in each.iteritems():
        value = list(value)
        temp_list.append(value[1])

    writer.writerow(temp_list)

3 个答案:

答案 0 :(得分:2)

您希望将循环放在open语句中,这样您就不会关闭并打开每次迭代的文件:

with open('output.csv', 'wb') as output:
    writer = csv.writer(output)
    for each in stock_data:
        for key, value in each.iteritems():
            writer.writerow([key, value])

答案 1 :(得分:0)

您的初始for循环每次都会打开w的文件,从而覆盖数据。尝试使用a进行追加。

答案 2 :(得分:0)

要解决您修改后的问题 - 首先要制作一个包含所有词汇的列表

list_of_dicts = [{'a': 0.26677069056418323, 'b': 0.8343139335624713, 'c': 0.93725104506273127, 'd': 0.12143573904160743, 'e': 0.98963812790339856},
 {'a': 0.40332934706524204, 'b': 0.12289641894313152, 'c': 0.15252859039025357, 'd': 0.24458514688306432, 'e': 0.97469243562553942},
 {'a': 0.1878765127021168, 'b': 0.81273464692942443, 'c': 0.90229778310411091, 'd': 0.6172062385825835, 'e': 0.32644941601058663}]
for key in list_of_dicts[0]: #this iterates through all the keys
    #makes a row using the same key for each dict in the list
    row = [d[key] for d in list_of_dicts] 
    writer.writerow(row)

或者,您可以将其作为单行代码执行:

writer.writerows(([d[k] for d in list_of_dicts] for k in d))