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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:51:17