Python中如何匹配两字典相同键并提取目标字典对应值
问题根源
你的代码无法匹配价格由3个问题导致:
order_menu的键是(餐品缩写, 餐品全称)格式的元组,你直接拿整个元组去和order_dictionary里的单个字符串做成员判断,永远不会匹配成功order_menu存在重复键:两个餐品都用了"Cr"作为键的第一个元素,Python字典会自动保留最后一次赋值的键值对,前面的蟹棒价格会被咖喱卷覆盖- 你命名为
order_dictionary的变量实际是集合类型,且存储的点单内容混用了缩写("C"、"S")和餐品名称("Hot Dog"、"Chicken Nugget"),原逻辑没有覆盖这两种匹配规则
修复实现
首先修正重复键问题,给两个原Cr开头的餐品分配不同的缩写键;之后遍历菜单时拆分元组的缩写、全称两个字段,只要任意一个命中点单集合就计入总价,代码如下:
# 修复重复键:原蟹棒与咖喱卷共用Cr键,将蟹棒缩写改为Crb避免值覆盖 order_menu = {("C", "Chips (Scoops)") : 2.80, ("F", "Fish (Battered)") : 2.90, ("Fc", "Fish (Crumbed)") : 4.90, ("Fib", "Filet (Battered)") : 6.90, ("Fic", "Filet (Crumbed)") : 6.90, ("Hd", "Hot Dog") : 2.60, ("S", "Sausage") : 2.60, ("Mp" , "Meat Patty (Homemade)") : 3.90, ("Crb", "Crabstick") : 2.50, ("Sr", "Spring Roll (Homemade)") : 2.80, ("Cr", "Curry Roll (Homemade)"): 2.80, ("Pof", "Potato Fritter (Homemade)") : 1.20, ("Paf", "Paua Fritter (Homemade)") : 5.90, ("Cn", "Chicken Nugget") : 1, ("Mh", "Mini Hot Dog (On a stick)") : 1.20, ("Pf", "Pineapple Fritter") : 2.50} order_items = {"C", "Hot Dog", "Chicken Nugget", "S"} # 重命名避免和字典类型混淆 total_amount = 0 for (food_abbr, food_name), price in order_menu.items(): # 缩写或全称任意一个命中点单列表,就累加价格 if food_abbr in order_items or food_name in order_items: print(f"匹配到餐品:{food_name},单价:{price}") total_amount += price print(f"订单总金额:{total_amount:.2f}")
运行输出
匹配到餐品:Chips (Scoops),单价:2.8 匹配到餐品:Hot Dog,单价:2.6 匹配到餐品:Sausage,单价:2.6 匹配到餐品:Chicken Nugget,单价:1 订单总金额:9.00
如果后续需要支持同一餐品点多份的场景,把order_items改为字典结构,键存餐品标识,值存对应份数,计算总价时用单价乘以份数即可。
内容的提问来源于stack exchange,提问作者GruffCheetah628
相关产品推荐
相关产品推荐

