在Openpyxl中使用嵌套字典创build一个列表

我想遍历Excel工作表中的所有行,并将每行(从第2行开始)的值存储在1个大表中的各个字典中。

从A列到D列的Excel中有一个简单的项目列表:

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})