如何匹配食谱字典食材与供应字典并输出供应商关联信息?
问题描述
现有三个Python字典:
recipedict = {'sandwich':['a buttered sandwich',[['bread','13'],['butter','4']]]} supplydict = {'bread':['150','15','james'],'butter':['15','12','allen'],'sugar':['15','12','marc']} supplierdict = {"james":'12345234',"allen":'17682342'}
需求:检查recipedict中第二个值的内层食材元素(bread、butter)是否存在于supplydict的键中;若存在,获取supplydict对应值中的供应商(james、allen),再从supplierdict中取出该供应商的联系方式,最终按如下格式输出:
ingredient: bread amount needed: 13 supplier: james supplier contact: 12345234 ingredient: butter amount needed: 4 supplier: allen supplier contact: 17682342
本人尝试编写了如下代码,但仅能输出整列表及关联字典值,无法实现预期格式输出:
def flatten(l): return [item for sublist in l for item in sublist] for key, value in recipedict.items(): onevalue = value[1] #print(onevalue) actuallist = [item[0] for item in onevalue] valew = [] for k in actuallist: if k in supplydict: valuee = supplydict.get(k) valew.append(valuee[2]) print(valew) z = flatten(onevalue) #print(y) n = 1 word = valew for i in range(n, len(onevalue) + n, n + 1): onevalue.insert(i, word) print(onevalue)
请提供正确的实现方案。
正确实现方案
直接遍历食谱内的食材列表,逐个校验并提取对应信息,按要求格式输出即可,代码如下:
# 遍历食谱字典中的所有食谱 for _, recipe_content in recipedict.items(): # 取出当前食谱的食材列表(对应值的第二个元素) ingredient_list = recipe_content[1] # 遍历每个食材的名称和所需数量 for ing_name, ing_amount in ingredient_list: # 检查该食材是否有供应记录 if ing_name in supplydict: # 提取供应商名称(supplydict对应值的第三个元素) supplier_name = supplydict[ing_name][2] # 提取供应商联系方式,默认显示"联系方式未知"避免键不存在报错 supplier_contact = supplierdict.get(supplier_name, "联系方式未知") # 按指定格式输出,每个食材块后加三个换行分隔 print(f"ingredient: {ing_name}\n") print(f"amount needed: {ing_amount}\n") print(f"supplier: {supplier_name}\n") print(f"supplier contact: {supplier_contact}\n\n\n")
代码逻辑说明:
- 遍历
recipedict时忽略食谱名称(用_占位),直接取出包含食材的列表; - 对每个食材解构出名称和所需数量,判断是否在
supplydict中; - 存在则从
supplydict中取供应商名称,再用该名称从supplierdict中获取联系方式; - 使用格式化字符串严格匹配要求的输出格式,每个食材信息块之间保留三个换行。
内容的提问来源于stack exchange,提问作者Emilia Feria
相关产品推荐
相关产品推荐

