2016-11-18 25 views
0

在Python中,我如何將下面的對象寫入到一個csv文件中,我以後可以手動導入到Excel中?python OrderedDict兩個鍵和多個值 - >寫入csv導入到excel

from collections import OrderedDict 
import csv 

data = OrderedDict([(('2016-11-01', 'USD'), ['ECB News', 'FED News']), 
        (('2016-11-02', 'EUR'), ['Brexit News']), 
        (('2016-11-03', 'USD'), ['Yellen Speaking'])]) 

with open('output.csv', 'wb') as output: 
    writer = csv.writer(output) 
    for each in data: 
     for key, value in each.iteritems(): #<<<<<----- error here 
      writer.writerow([key, value]) 

錯誤:

for key, value in each.iteritems(): 
    AttributeError: 'tuple' object has no attribute 'iteritems' 

CSV輸出想要的東西:

2016-11-01;USD;ECB News,FED News 
2016-11-02;EUR;Brexit News 
2016-11-03;USD;Yellen Speaking 
+0

'iteritems ()'是一個字典而不是元組的方法。 – IanAuld

回答

1

each是在data字典,它正確地說,是一個元組的關鍵。你可能剛放錯了地方的iteritems()

from io import StringIO 
with StringIO() as output: 
    writer = csv.writer(output, delimiter=';') 
    for k, v in data.iteritems(): 
     writer.writerow(list(k)+[','.join(v)]) 
    print(output.getvalue()) 

輸出:

2016-11-01;USD;ECB News,FED News 
2016-11-02;EUR;Brexit News 
2016-11-03;USD;Yellen Speaking 

您可以取代:

for k, v in data.iteritems(): 
     writer.writerow(list(k)+[','.join(v)]) 

有:

writer.writerows(list(k)+[','.join(v)] for k, v in data.iteritems()) 
+0

謝謝AChampion,它工作。我還需要將迭代代碼更改爲 - >>>> for k,v in data.items(): –

+0

@KS如果您使用的是python3,那麼是的,使用'data.items()'。在python2中,'.iteritems()'返回一個迭代器,並且比'.items()'返回一個'list'要便宜。 – AChampion

+0

@AC感謝那些信息,這說明了它爲什麼不起作用。 –