Python中访问嵌套字典数据及实现最高热量餐单生成函数的方法
解决嵌套字典的最高热量餐单生成问题 & 新手学习指引
嗨,我来帮你搞定这个问题!你已经掌握了基础的嵌套字典访问,接下来我们一步步实现这个函数,同时给你一些针对新手的学习建议。
一、最高热量餐单函数实现
你的需求是每个菜品类别中选一个热量最高的菜品,组成餐单——因为每个类别必须选一个,所以最优解就是每个类别挑热量最高的那个,这样整体餐单的总热量自然是最大的。下面是具体的函数实现:
def get_highest_calorie_meal(menu_data): # 用来存储每个餐厅的最高热量餐单 highest_meals = {} # 遍历每一家餐厅 for restaurant, categories in menu_data.items(): restaurant_meal = {} # 遍历当前餐厅的每个菜品类别(比如Burgers、French Fries) for category, dishes in categories.items(): # 找到当前类别中热量最高的菜品 # max函数的key参数指定用菜品的calories值来比较 highest_cal_dish = max(dishes.items(), key=lambda x: x[1]['calories']) # 把类别和对应的最高热量菜品存入餐单 # 这里我们存储菜品名称和完整营养信息 restaurant_meal[category] = { 'dish_name': highest_cal_dish[0], 'nutrition': highest_cal_dish[1] } # 把当前餐厅的餐单加入结果字典 highest_meals[restaurant] = restaurant_meal return highest_meals # 调用函数测试 result = get_highest_calorie_meal(rivals) # 打印结果(可以按需调整输出格式) for restaurant, meal in result.items(): print(f"\n=== {restaurant} 最高热量餐单 ===") total_cal = 0 for category, dish_info in meal.items(): print(f"{category}: {dish_info['dish_name']}") print(f" 热量: {dish_info['nutrition']['calories']} 卡,碳水: {dish_info['nutrition']['carbs']}g,脂肪: {dish_info['nutrition']['fat']}g") total_cal += dish_info['nutrition']['calories'] print(f"总热量: {total_cal} 卡")
代码解释:
menu_data.items():遍历字典的键值对,这里拿到的是餐厅名称和对应的类别字典。max(dishes.items(), key=lambda x: x[1]['calories']):dishes.items()返回的是(菜品名称,营养字典)的元组,lambda x: x[1]['calories']告诉max()函数用营养字典里的calories值来比较大小,最终返回热量最高的那个菜品元组。- 结果结构清晰,每个餐厅对应一个餐单,餐单里每个类别都标注了选中的菜品和营养信息,还可以计算总热量。
二、Python新手学习指引
针对你遇到的嵌套数据访问和自定义函数问题,给你几个重点学习方向:
- 嵌套数据结构的遍历技巧:
多层嵌套字典/列表的访问,核心是逐层拆解。可以先打印每一层的数据(比如print(rivals['In-N-Out Burger'].keys())),直观理解数据结构,再写循环。 - 内置函数的灵活使用:
像max()、min()这类函数的key参数非常实用,能帮你快速找到符合条件的元素,避免写冗长的循环判断。同理还有sorted()函数,也可以用key参数自定义排序规则。 - 自定义函数的设计思路:
遇到需求先拆解步骤(比如你的问题:遍历餐厅→遍历类别→找每个类别最高热量菜品→收集结果),把大问题拆成小步骤,再逐步转化为代码。 - 调试与验证:
写代码时不要一次性写完,每完成一个小步骤就打印中间结果验证。比如先写遍历餐厅的循环,打印餐厅名称;再写遍历类别的循环,打印类别名称;最后加找最高热量菜品的逻辑,这样能快速定位问题。 - 代码可读性优化:
用有意义的变量名(比如restaurant、categories、dishes),避免用a、b这类模糊的名字;加必要的注释,解释关键逻辑,方便自己后期维护和别人理解。
内容的提问来源于stack exchange,提问作者newtopython
相关产品推荐
相关产品推荐

