Как выполнить поиск по словарю, используя ввод пользователя в качестве ключа внутри вложенного словаря?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как выполнить поиск по словарю, используя ввод пользователя в качестве ключа внутри вложенного словаря?

Сообщение Anonymous »

Работаю над последним проектом для cs50. Введение в программирование на Python. Попытка реализовать программу с несколькими функциями, такими как: расчет уровня основного обмена, форматирование списка продуктов, печать пищевой ценности указанного пользователем продукта и предложение/сортировка продуктов по их ценности в зависимости от макронутриента, указанного пользователем.< /p>
Проблемы с последней функцией.
У меня есть двухуровневый глубокий список разных продуктов с их пищевой ценностью, например — банана:

Код: Выделить всё

products = {"banana": {"protein": 1.3, "fat": 0.4, "carbs": 27.0, "fiber": 3.1, "calories": 105}}
Я хочу реализовать функцию, которая запрашивает у пользователя макронутриент (белки, жиры, углеводы, клетчатку или калории - все это ключи для вложенного словаря), осуществляет поиск по словарю продуктов а затем выводит три лучших продукта на основе их пищевой ценности, указанной пользователем.
У меня возникли проблемы с сортировкой слов по их ценности (на мой взгляд). Мысль о сохранении значения в виде вложенного списка:

Код: Выделить всё

products = {"banana": [1.3, 0.4, 27.0, 3.1, 105]}
Таким образом, я могу вызвать значение:

Код: Выделить всё

product = input("Name of a product: ").lower().strip()
macro = input("Name of a macronutrient: ").lower().strip()
# using macro variable and if statements to specify the index of a list
if macro == "protein":
products.keys(product)[0] # running into a problem when calling product here
Но описание продуктов в любом случае кажется загадочным, поэтому я бы хотел избежать этого варианта.
На данный момент у меня есть следующая функция:

Код: Выделить всё

def _get_nested_val(data, *args):
if args and data:
element  = args[0]
if element:
value = data.get(element)
return value if len(args) == 1 else _get_nested_val(value, *args[1:])
Я вызываю эту функцию в main(), чтобы показать пользователю пищевую ценность конкретного продукта:

Код: Выделить всё

    elif initial == "show specifics":
product = input("Enter a name of the product: ").lower().strip()
call = input("Enter a macronutrient: ").lower().strip()
if call == "protein" or call == "fat" or call == "carbs" or call == "fiber":
print(_get_nested_val(products, product, call), "grams of", call, "in", product.capitalize())
elif call == "calories":
print(_get_nested_val(products, product, call), "calories in", product.capitalize())
Мне интересно, могу ли я использовать функцию _get_nested_val() для сортировки и вывода нескольких продуктов, указанных при вводе пользователя.
Я проверил много других вопросов о переполнении стека, но мне не удается заставить мою программу работать так, как я хочу.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ested-dict
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»