Создание списка с вложенными словарями в Openpyxl

Я хочу просмотреть все строки в листе Excel и сохранить значение каждой строки (начиная со строки 2) в отдельных словарях в одном большом списке.

У меня есть простой список элементов в Excel, заключенный из столбца A – столбец D:

Fruit: Quantity: Color: Cost Apple 5 Red 0.6 Banana 6 Yellow 0.4 Orange 4 Orange 0.3 Kiwi 2 Green 0.1 

Я хочу, чтобы первый результат выглядел так:

 [{'Fruit': 'Apple', 'Quantity': 5, 'Color': 'Red', 'Cost': 0.6}] 

Вот как мой код выглядит на данный момент:

 import openpyxl wb = openpyxl.load_workbook('fruit.xlsx') sheet = wb.get_sheet_by_name('Sheet1') for row in range(2, sheet.max_row + 1): fruit = sheet['A' + str(row)].value quantity = sheet['B' + str(row)].value color = sheet['C' + str(row)].value cost = sheet['D' + str(row)].value allFruits = [{'Fruit': fruit, 'Quantity': quantity, 'Color': color, 'Cost': cost}] print(allFruits) 

Когда я запускаю код, результат выводит только последнюю активную строку в листе:

 [{'Fruit': 'Kiwi', 'Quantity': 2, 'Color': 'Green', 'Cost': 0.1}] 

Я хочу этот формат для ВСЕХ строк, а не только для последней строки. Я не понимаю, почему код пропускает все строки между ними и просто печатает последнюю строку. Может ли кто-нибудь помочь?

Когда вы назначаете allFruits внутри своего цикла, вы перезаписываете его на каждой итерации.

Вместо этого определите список allFruits за пределами вашего цикла и вызовите allFruits.append() внутри цикла, чтобы добавить каждый словарь фруктов.

 allFruits = [] for row in range(2, sheet.max_row + 1): fruit = sheet['A' + str(row)].value quantity = sheet['B' + str(row)].value color = sheet['C' + str(row)].value cost = sheet['D' + str(row)].value allFruits.append({'Fruit': fruit, 'Quantity': quantity, 'Color': color, 'Cost': cost}) 

Вы также можете сократить код, выполнив следующие действия:

 allFruits = [] key_col = [('Fruit', 'A'), ('Quantity', 'B'), ('Color', 'C'), ('Cost', 'D')] for row in range(2, sheet.max_row + 1): allFruits.append({key:sheet[col+str(row)].value for (key, col) in key_col}) 
Interesting Posts

Правильный разделитель для использования в Excel get_Range в VSTO

Использование Sumproduct для подсчета количества между диапазоном дат в Excel

Excel, отправляющий электронные письма всем людям в одной колонке, должен отправлять по электронной почте только человека в определенной ячейке. Как?

Первые 500 граммов 38 долларов, последующие 500gram 12 долларов

Значение переменной не увеличивается

Защита файлов excel

Копирование и вставка ненулевых строк и соседних ячеек

Получение формата ячейки в файле excel с использованием C #

Странные символы при экспорте в Excel

Используя VBA для подсчета количества незакрытых (видимых) листов в левой части активного листа (excel)?

Обновление базы данных Access через лист Excel

Как автоматически принимать приглашение Excel с помощью VBA?

Для каждого рабочего листа в книге

Ошибка выполнения '-2147217900' (80040e14) ': ошибка автоматизации с использованием в sql-запросе от excel vba

Форматирование значения ячейки в «MMMM» с использованием excel vba

Давайте будем гением компьютера.