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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:24:18