比较两个字典,并将已识别的键和值差添加到新的dict中

2024-05-12 20:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个字典,我正在尝试使用For循环混合If条件来实现以下功能

  1. 对于膳食配方中的每个“项目”,检查项目是否在食品储藏室
  2. 如果是,检查膳食配方的“价值”是否大于餐具室。如果是,在购物清单中添加键+价值差异
  3. 如果否,则添加键和;菜谱在购物清单中的价值
meal_recipe = {'pasta': 2, 'garlic': 2, 'sauce': 3,
          'basil': 4, 'salt': 1, 'pepper': 2,
          'olive oil': 2, 'onions': 2, 'mushrooms': 6}

pantry = {'pasta': 3, 'garlic': 4,'sauce': 2,
          'basil': 2, 'salt': 3, 'olive oil': 3,
          'rice': 3, 'bread': 3, 'peanut butter': 1,
          'flour': 1, 'eggs': 1, 'onions': 1, 'mushrooms': 3,
          'broccoli': 2, 'butter': 2,'pickles': 6, 'milk': 2,
          'chia seeds': 5}

我是python的noob,所以到目前为止,我一直坚持下面的代码,不知道如何继续:

for item, stock in meal_recipe.items():
    if item in pantry:
         if mean_recipe [stock] > pantry [stock]: ????? Not sure
                Shopping_list={item for item in mean_recipe} ????? Not sure

有人能告诉我怎么做吗


Tags: 项目instock配方recipeitem购物价值
1条回答
网友
1楼 · 发布于 2024-05-12 20:24:31

stock不是字典键,它是来自meal_recipe的值。关键是item。所以你应该使用pantry[item],而不是pantry[stock]

您可以使用dict.get()方法来指定默认值,而不是显式检查该项是否在字典中。这样,您可以将字典中不存在的项视为数量为0,这将始终小于您需要的数量

for ingredient, qty_needed in meal_recipe.items():
    qty_in_pantry = pantry.get(ingredient, 0)
    if qty_needed > qty_in_pantry:
        shopping_list[ingredient] = qty_needed - qty_in_pantry

如果购物清单中可能已经有商品,并且您可能希望增加购买数量,那么您也可以在那里使用.get()

shopping_list[ingredient] = shopping_list.get(ingredient, 0) + qty_needed - qty_in_pantry

相关问题 更多 >