原谅我。我是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)
答案 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))