2015-07-03 2 views
4

Я собрал информацию о университетах на siggragh, используя вложенную Dict, как этогопитона вложенными ДИКТ в CSV со многими колоннами

universityDict['utah'][2008] = 11 
universityDict['utah'][2009] = 0 

означает Юта номинирована 11 раз в 2008 году и 0 раз в 2009 году (предположений) как я получил много столбцов - 2008 2009 2010 .... и так далее. Как я могу их выводить в файл csv аккуратным способом?

for key,value in universityDict.items(): 
    writer.writerow({'university': key, '2008':value[2008] })#not this way 

Я хочу CSV-как:

university,2006,2007 

utah,4,8 

mit,0,4 

ответ

0

Предполагая, что вопрос отступа не является реальной проблемой, вы делаете это неправильно в вашем коде.

Внутри вашего первого цикла вам снова нужно выполнить итерацию через вложенный словарь и поместить его в csv.

Пример -

for key,value in universityDict.items(): 
    d = {'university': key} 
    d.update(value) 

    writer.writerow(d) 
0

Вы можете сделать это в два этапа, как показано ниже:

import csv 

universityDict = {'arizon': {2006: 4, 2007: 3}, 
        'ohio': {2008: 3, 2009: 10, 2010: 5}, 
        'utah': {2008: 11, 2009: 0}} 

# first determine what years are present to use to define the csv fieldnames 
years = set((year for nominations in universityDict.values() 
        for year in nominations)) 
fieldnames =['university'] + sorted(years) 

# next write the csv file and convert nested nominations to data for row 
with open('university_nominations.csv', 'w', newline='') as csvfile: 
    writer = csv.DictWriter(csvfile, fieldnames) 
    writer.writeheader() 
    for university,nominations in universityDict.items(): 
     row = {'university': university} 
     row.update(nominations) 
     writer.writerow(row) 

Содержание CSV файл создан:

university,2006,2007,2008,2009,2010 
ohio,,,3,10,5 
utah,,,11,0, 
arizon,4,3,,, 
Смежные вопросы