【问题标题】:How can I let python print out the right output using a dictionary?如何让 python 使用字典打印出正确的输出?
【发布时间】:2021-12-31 09:32:23
【问题描述】:

所以我创建了一个列表和一个函数,它返回一个单独的列表作为字典,就像这样 所以第一个列表是这样的

r = ["T-bone", "Green Salad1"]

将输出作为字典返回的函数是这个......

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

上述函数的输出在 dictionary 中,就像这样 btw

{'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(recipes, data),它将返回提供的字典中的值和列表提供的匹配键。返回类型应为列表。

例如,如果输入是

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}}  )

输出将返回以下列表

["Carrot:2, Steak Meat:1","Cabbage: 10, Carrot: 2, Pineapple: 5"]

我应该在 estract(recipes, data) 下写什么以获得正确的输出??

【问题讨论】:

  • 你期望返回类型是什么?一个字典中不能有两次相同的键 (Carrot)。
  • 没有胡萝卜不是关键...在我的示例中,胡萝卜是 T 骨和绿色沙拉的一部分...我只想要一个返回 ["Carrot:2, Steak Meat: 1","Cabbage: 10, Carrot: 2, Pineapple: 5"] 当 Tbone 和 Green Salad1 被调用时

标签: python list tuples


【解决方案1】:

试试:

def extract(recipes, data):
    result = []
    for r in recipes:
        result.append(", ".join(f"{k}:{v}" for k, v in data[r].items()))
    return result

结果:

['Carrot:2, Steak Meat:1', 'Cabbage:10, Carrot:2, Pineapple:5']
  • 编辑

没有joinitemsdict理解:

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

【讨论】:

  • 有没有办法在不使用 .items 的情况下做到这一点?我想尽可能少地使用内置函数
  • 谢谢你的回复顺便说一句
  • 为什么?也刚刚认识到,上述解决方案将精确比较密钥,因此提供的示例不会返回 T-Bone,因为您的列表要求 T-bone。如果您想完成这项工作,您必须提供正确的密钥或忽略大小写。
  • @JoshuaBradley 我的意思是,当然,我可以更新答案以给出一个没有join 的例子,但这确实让事情变得更容易。 @Greenfly77 我也看到了 T-BoneT-bone 问题,但认为这只是一个错字。
  • @JoshuaBradley 更新
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多