首页 > 解决方案 > 如何将键的值放在excel(Dict)上的正确位置?

问题描述

我正在尝试用我的饭菜制作一个 Excel 表格。我能够建立基础知识,但是当我想要每一种成分和他的克数时,问题就开始了。

import openpyxl as xl
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

data = {
    "Meal 1": {
        "Eggs": "140g",
        "Cheese": "200g",
        "Salad": "200g",
        "Avocado": "150g"
    },
    "Meal 2": {
        "Snake": "50g",
        "Coffee": "250g",
    },
    "Meal 3": {
        "Rice": "300g",
        "Meat": "200g",
        "Vagtables": "150g",

    },
    "Meal 4": {
        "Fruit": "150g",
    },
    "Meal 5": {
        "Eggs": "140g",
        "Cheese": "200g",
        "Tuna": "250g",
        "Avocado": "150g"
    }
}

wb = Workbook()
ws = wb['Sheet']
ws.title = 'Ordinary Meal Day'
headings = ["Eggs","Cheese","Salad","Avocado","Snake","Coffee","Rice","Meat","Vagtables","Fruit","Tuna"]
ws.append(headings)
for Meals in data:
    Ingredients = list(data[Meals].values())
    ws.append([Meals] + list(Ingredients))


wb.save('Meals.xlsx')

在excel上,成分的克数不在正确的位置。现在,我想到了一个解决方案,我需要创建一个循环和 if 语句来比较成分的名称,但我不确定这是否是最好的主意。

标签: pythondictionaryopenpyxl

解决方案


如果可以使用 pandas,那就很简单了:

import pandas as pd
df = pd.DataFrame(data)

然后你得到:

餐1 膳食 2 膳食 3 餐 4 第五餐
140克 140克
奶酪 200克 200克
沙拉 200克
牛油果 150克 150克
50克
咖啡 250克
300克
200克
杂物 150克
水果 150克
金枪鱼 250克

你可以发送到一个excel文件:

df.to_excel('meals.xlsx')

或者,如果您想要一个宽表,您可以转置 df:

df = pd.DataFrame(data).T
奶酪 沙拉 牛油果 咖啡 杂物 水果 金枪鱼
餐1 140克 200克 200克 150克
膳食 2 50克 250克
膳食 3 300克 200克 150克
餐 4 150克
第五餐 140克 200克 150克 250克

并再次表现出色:

df.to_excel('meals_wide.xlsx')

推荐阅读