繁体   English   中英

如何使用我的辅助函数来获得正确的 output

[英]How can I use my helper functions to get the correct output

所以我创建了一个助手 function 来帮助我的主要 function 从字典中提取内容......这是我的代码和 function

def rdict(recipes):
    recipes_splitted = {}
    for r in recipes:
        recipe_name, parts = r.split(":")
        recipe_parts = {}
        for part in parts.split(','):
            product, number = part.split('*')
            recipe_parts[product] = int(number)
        recipes_splitted[recipe_name] = recipe_parts
    return recipes_splitted
def extract(recipes, data):
    result = []
    for r in recipes:
        tmp = []
        for key in data[r]:
            tmp.append(f"{key}:{data[r][key]}")
        final_string = ""
        for i in range(len(tmp)):
            if i < len(tmp) - 1:
                final_string += tmp[i] + ", "
            else:
                final_string += tmp[i]
        result.append(final_string)
    return result

所以我想做的是通过rdict(data) data extract(recipe, data) go 中的数据,因为 rdict 会将数据转换为字典,这是我需要的。但是,当我尝试for key in rdict(data[r]): output 返回Error. String is not supscriptable Error. String is not supscriptable ..

我应该怎么做才能成功实施更改?

编辑

因此,从我当前的代码中,这是一个示例输入..

print(extract(recipes = ['T-Bone', 'Green Salad1'],data = ["Pork Stew:Cabbage*5,Carrot*1,Fatty Pork*10",
"Green Salad1:Cabbage*10,Carrot*2,Pineapple*5",
"T-Bone:Carrot*2,Steak Meat*1"]
))

为了让我的代码正常工作,它必须是这样的

print(extract(recipes = ['T-Bone', 'Green Salad1'], data = {'Pork Stew': {'Cabbage': 5, 'Carrot': 1, 'Fatty Pork': 10}, 'Green Salad1': {'Cabbage': 10, 'Carrot': 2, 'Pineapple': 5},'T-Bone': {'Carrot': 2, 'Steak Meat': 1}}))

所以从输入,数据应该从

data = ["Pork Stew:Cabbage*5,Carrot*1,Fatty Pork*10",
    "Green Salad1:Cabbage*10,Carrot*2,Pineapple*5",
    "T-Bone:Carrot*2,Steak Meat*1"]

data = {'Pork Stew': {'Cabbage': 5, 'Carrot': 1, 'Fatty Pork': 10}, 'Green Salad1': {'Cabbage': 10, 'Carrot': 2, 'Pineapple': 5},'T-Bone': {'Carrot': 2, 'Steak Meat': 1}}

在 extract() 中将数据转换为 dict。

recipes = ['T-Bone', 'Green Salad1']

data = ["Pork Stew:Cabbage*5,Carrot*1,Fatty Pork*10",
"Green Salad1:Cabbage*10,Carrot*2,Pineapple*5",
"T-Bone:Carrot*2,Steak Meat*1"]


def rdict(recipes):
    recipes_splitted = {}
    for r in recipes:
        recipe_name, parts = r.split(":")
        recipe_parts = {}
        for part in parts.split(','):
            product, number = part.split('*')
            recipe_parts[product] = int(number)
        recipes_splitted[recipe_name] = recipe_parts
    return recipes_splitted


def extract(recipes, data):
    data = rdict(data)  # convert data to dict first
    result = []
    for r in recipes:
        tmp = []
        for key in data[r]:            
            tmp.append(f"{key}:{data[r][key]}")
        final_string = ""
        for i in range(len(tmp)):
            if i < len(tmp) - 1:
                final_string += tmp[i] + ", "
            else:
                final_string += tmp[i]
        result.append(final_string)
    return result

print(extract(recipes, data))

Output:

['Carrot:2, Steak Meat:1', 'Cabbage:10, Carrot:2, Pineapple:5']
  1. rdict重新命名为parse_recipe ,并对其进行修改以返回一个更轻且更易于处理的元组

  2. 在摘录中:

    a) 建立一个食谱字典: data_recipes

    b)通过获取想要的食谱来构建结果,并防止缺少食谱(这是一个空字典: {}

def parse_recipe(s):
    recipe, ings_s = s.split(':')
    ings_l = ings_s.split(',')
    
    ings_d= {}
    for ing in ings_l:
        i,q = ing.split('*')
        ings_d[i.strip()] = q.strip()

    return recipe.strip(), ings_d


def extract(recipes, data):
    data_recipes = {}
    for s in data:
        recipe, ings_d = parse_recipe(s)
        data_recipes[recipe] = ings_d

    return {r: data_recipes.get(r, dict()) for r in recipes}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM