Как напечатать вложенный словарь в листе Excel? - PullRequest
0 голосов
/ 04 мая 2019

Я новичок в Python и пытаюсь внести некоторые изменения в проект под названием (Чтение данных из электронной таблицы, глава 12 «Работа с Excel») из «Автоматизировать скучные вещи с помощью Python». Закончив проект, я хочу напечатать полученный ранее словарь на новом листе в той же книге. Но сейчас, когда я пытался написать в листе Excel, у меня возникли некоторые проблемы с вложенным словарем. Сбой кода во второй строке во вложенном цикле, поэтому я предположил, что то же самое произойдет для строк netx в цикле

import openpyxl, pprint
libro=openpyxl.load_workbook(r"J:Pathtothedata\censuspopdata.xlsx")
hoja = libro.active
countyData={}
print('Reading rows...')
for row in range(2, hoja.max_row + 1):
    # Each row in the spreadsheet has data for one census tract.
    state = hoja['B' + str(row)].value
    county = hoja['C' + str(row)].value
    pop = hoja['D' + str(row)].value
    countyData.setdefault(state,{})
    countyData[state].setdefault(county, {'tracts': 0, 'pop': 0})
    countyData[state][county]['tracts'] += 1
    countyData[state][county]['pop'] += int(pop)
print('Writing results...')
libro.create_sheet(index=1,title='Subtotal')#Create a new worksheet
hoja1 = libro.worksheets[1]#set that sheet as active

#Here starts the problems
next_row = 1
for key, value in countyData.items():#for each element in allCounty print the results
    for pop, tracts in value.items():
        hoja1.cell(column=1,row=next_row,value=key)
        hoja1.cell(column=2,row=next_row,value=value)
        hoja1.cell(column=3,row=next_row,value=pop)
        hoja1.cell(column=3,row=next_row,value=tracts)
        next_row+=1
libro.save

Я пытался изменить вторую строку hoja1.cell (столбец = 2, строка = next_row, значение = значение) до:

hoja1.cell(column=2,row=next_row,value=countyData[key])

и не работает. Он показывает мне весь словарь с легендой «поднять ValueError (« Невозможно преобразовать {0! R} в Excel ».format (значение))»

тогда я пробовал: hoja1.cell (столбец = 2, строка = next_row, значение = countyData.get (ключ) и показывает мне:

hoja1.cell(column=3,row=next_row,value=value.get(pop) 
    ^
SyntaxError: invalid syntax

Я ожидаю, что результат будет

«Штат», «Округ», «Население», «Участки» для каждого значения в словаре.

...