如何用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
相关产品推荐
相关产品推荐

