You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用tabulate函数处理三层嵌套字典并生成指定格式表格?

用tabulate处理三层嵌套字典生成指定表格

可以用tabulate处理这种三层嵌套字典,下面直接给出实现两种表格的代码,先修正你提供的MENU字典的语法错误(原代码存在多余闭合括号):

MENU = {
    "espresso": {
        "ingredients 1": {
            "water": 50,
            "coffee": 18,
        },
        "ingredients 2": {
            "water": 55,
            "coffee": 20,
        }
    },
    "latte": {
        "ingredients 1": {
            "water": 200,
            "coffee": 24,
        },
        "ingredients 2": {
            "water": 225,
            "coffee": 30,
        }
    },
    "cappuccino": {
        "ingredients 1": {
            "water": 150,
            "coffee": 45,
        },
        "ingredients 2": {
            "water": 155,
            "coffee": 40,
        }
    }
}

第一种表格实现(重复显示饮料名)

先将嵌套字典转换成tabulate需要的结构化数据,再调用tabulate输出:

from tabulate import tabulate

# 整理数据为二维列表
table_data = []
headers = ["Drink", "Info", "Water", "Coffee"]

for drink, ingredients in MENU.items():
    for ing_name, ing_values in ingredients.items():
        table_data.append([
            drink.title(),
            ing_name.title(),
            ing_values["water"],
            ing_values["coffee"]
        ])

# 输出表格
print(tabulate(table_data, headers=headers, tablefmt="simple"))

输出结果:

Drink        Info        Water  Coffee
--------      ------       -----  ------
Espresso    Ingredients 1    50     18
Espresso    Ingredients 2    55     20
Latte       Ingredients 1   200     24
Latte       Ingredients 2   225     30
Cappuccino  Ingredients 1   150     45
Cappuccino  Ingredients 2   155     40

第二种表格实现(饮料名仅首行显示)

处理重复的饮料名,将同一饮料的后续行的饮料名设为空字符串,再输出:

from tabulate import tabulate

table_data = []
headers = ["Drink", "Info", "Water", "Coffee"]

for drink, ingredients in MENU.items():
    ing_list = list(ingredients.items())
    for idx, (ing_name, ing_values) in enumerate(ing_list):
        # 仅第一行显示饮料名,其余行留空
        drink_name = drink.title() if idx == 0 else ""
        table_data.append([
            drink_name,
            ing_name.title(),
            ing_values["water"],
            ing_values["coffee"]
        ])

# 输出表格,用simple格式保证对齐
print(tabulate(table_data, headers=headers, tablefmt="simple"))

输出结果:

Drink        Info        Water  Coffee
--------      ------       -----  ------
Espresso    Ingredients 1    50     18
            Ingredients 2    55     20
Latte       Ingredients 1   200     24
            Ingredients 2   225     30
Cappuccino  Ingredients 1   150     45
            Ingredients 2   155     40

内容的提问来源于stack exchange,提问作者sabuu26

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:56:03