Python如何按字典值筛选元素 将≥20美元菜品归入specialMenu字典
问题排查
代码运行异常是几个基础错误叠加导致的:
- 类型不匹配:读取txt文件时存入
menu的价格是字符串格式,判断逻辑里直接拿字符串和整数20做比较,永远得不到匹配结果;且判断条件写的是v == 20,不符合「大于等于20美元」的筛选需求 - 方法误用:
specialMenu定义为字典类型,却调用了列表专属的append()方法,运行会直接抛出属性错误,字典添加键值对的正确语法是字典名[键] = 值 - 拼写错误:变量名反复写错,一会是
specailMenu(special字母顺序颠倒),一会参数里写成specaiMenu,会触发未定义变量报错 - 逻辑遗漏:价格全程以字符串格式存储,后续计算均价的逻辑也无法正常运行
核心语法说明
筛选字典中符合条件的键值对,最简洁的写法是用字典推导式,语法格式为:
新字典 = {键:值 for 键,值 in 原字典.items() if 筛选条件}
如果用普通for循环实现,遍历原字典的所有键值对后,把满足条件的键值对直接赋值到新字典即可,不要调用列表的追加方法。
修正后可运行代码
menu = {} specialMenu = {} # 统一修正拼写错误 def getMenu(): """读取并展示完整菜单""" print("Here is our current menu: \n") # 用with上下文管理打开文件,自动释放资源,避免手动关闭的疏漏 with open("standardMenu.txt", 'r', encoding='utf-8') as inputFile: print("{:<30} {:<10}".format("Item", "Price")) for line in inputFile: line = line.strip() if not line: # 跳过文件中的空行 continue itemInfo = line.split("$") itemName = itemInfo[0].strip() # 读取时直接把价格转为float类型存储,后续使用无需反复转换 itemPrice = float(itemInfo[1].strip()) menu[itemName] = itemPrice print("{:<30} ${:<10.2f}".format(itemName, itemPrice)) print("\n") getSpecialMenu(menu) def getSpecialMenu(menu): """筛选价格20美元及以上的菜品到特选菜单""" global specialMenu # 用字典推导式直接完成筛选,代码更简洁 specialMenu = {k:v for k,v in menu.items() if v >= 20} viewMenu(specialMenu) avg_cost = mean(specialMenu.values()) print("The total average cost of the Special Menu is ${:.2f}".format(avg_cost)) def viewMenu(targetMenu): """展示传入的菜单内容""" print("Here is our Special Menu") print("{:<30} {:<10}".format("Item", "Price")) for x, y in targetMenu.items(): print("{:<30} ${:<10.2f}".format(x, y)) def mean(price_list): """计算菜单平均价格""" total = 0 for count in price_list: total += count return total / len(price_list) def ext(): """退出程序""" input("Hit any button to exit: ") exit() def main(): """脚本主函数""" getMenu() ext() if __name__ == "__main__": main()
运行效果说明
代码运行后会先输出全量菜单,再自动筛选出价格≥20美元的4款菜品:Spicy Beef Barbeque(20.00美元)、Pulled Beef Barbeque Burger(25.00美元)、Full Rack of Ribs(22.50美元)、Champagne(20.00美元),最终计算出特选菜单的均价为21.88美元。
内容的提问来源于stack exchange,提问作者Balexander013
相关产品推荐
相关产品推荐

