python - 通过用户输入搜索词典

标签 python dictionary user-input

我并不是 Python 的初学者,但也不是很有经验。

我正在开发一个小项目,想知道最好的行动方案是什么。我想制作一本不同冷冻食品的食物词典,显示每个条目的营养值(value)。

Food_Catalog_Frozen.py 中的条目示例如下:

Burrito = {
    "calories": 310,
    "fats": 14,
    "sodium": 330,
    "carbohydrates": 35,
    "sugars": 1,
    "protein": 9,
}

然后我想单独制作一个“What's Cookin'?”用户输入他们吃的所有东西的脚本,所有的值都会被添加。

在处理任何分析之前,我想看看是否可以按原样打印出食物。以下是尝试打印上述墨西哥卷饼的营养信息的代码。

import Food_Catalog_Frozen as Frozen

print("What's cookin', good lookin'?\n")

STOP = False

while STOP == False:
    food = input()  # Enter Burrito
    if food == "done":
        STOP = True
    else:
        print(Frozen.food)

并抛出以下错误:

 print(Frozen.food)
AttributeError: module 'Food_Catalog_Frozen' has no attribute 'food'

主要问题是变量 food,尽管在本例中现在被视为 Burrito,但字典仍在搜索 Frozen.food 而不是 Frozen.Burrito,后者确实有效。看来不可能通过用户输入来搜索词典。

如果有人能说出为什么这不起作用或者是否有更好的方法来做到这一点,我们将不胜感激。谢谢。

最佳答案

快速解决方案是执行print(getattr(Frozen, food))。这是可行的,因为 BurritoFrozen 的实际变量(属性),而 getattr 用于获取属性。但是,我不推荐此解决方案。

最好的方法是重新思考你的设计。您可以使用顶级dict,而不是使用与可能的食物类型相对应的单个变量:

foods = {
    "Burrito": {
        "calories": 310,
        "fats": 14,
        "sodium": 330,
        "carbohydrates": 35,
        "sugars": 1,
        "protein": 9
    },
    ...
}

然后您可以将 print(Frozen.food) 更改为 print(Frozen.foods[food])。如果您想确保输入的食物已注册,您可以将 print 包含在以下 if 中:

if food in Frozen.foods:
    print(Frozen.foods[food])

关于python - 通过用户输入搜索词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61712574/

相关文章:

python - 基于多种条件过滤像素

python - 点之间的欧几里得距离

python - 如果字符串包含一个子字符串,后跟另一个子字符串,则使用 python 中的正则表达式进行匹配

c++ - cout 不显示 double 值

javascript - Angular JS : Set partial form field value?

C#-尝试将用户输入解析为 int 时出错

python - 使用UTF-8打开文件进行读取

python - 使用字典的子字典中的值创建新键

c# - 两个键元组的列表或字典

C#:来自字典语法错误的 LINQ 查询,尽管在 SO 中重复使用