обновление пустого словаря через функцию - PullRequest
0 голосов
/ 14 декабря 2018

Я все еще работаю над проектом pep, и в настоящее время на стадии создания своего собственного класса и функций.Я создал класс, где я могу найти любой данный ингредиент в моем банке рецептов (это словарь);Теперь все, что я хочу сделать, - это сохранить выбранный рецепт в пустом словаре.Это будут любимые рецепты пользователей в словаре.

Я думаю, что понимаю логику / теорию, стоящую за этим, но застрял на практическом.

recipe_bank = {"reciepe1":("1", "2", "3", "4", "5"),
               "reciepe2":["10 blah blah blah", "20", "30", "40", "50"]}
class ChefEasy():
    def __init__(self, save):
        self.save = save

    def favourites(self):
        my_fav = {}
        for r,d in recipe_bank.items():
            x = {r,d}
            if choose == "y":
                my_fav += x
            print(my_fav)

print("Would you like to save your meal")
choose = input()
if choose == "n":
    print("OK! Enjoy your meal!")
elif choose == "y":
    yes = ChefEasy("y)
    print(yes.save("Your meal has been saved!")

Это был мой оригинальный код, который дает мне -TypeError: объект 'str' не вызывается.

Когда я немного больше изучил этот код, я подумал, что было бы лучше скопировать{r, d} в объект (x), а затем используйте метод my_fav.update (x), но я не слишком уверен, что это сработает ..

Любая помощь или совет будет принята с благодарностью.

Большое спасибо:)

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Чтобы добавить мои два цента.У Dicts есть метод обновления

someDict = dict(someKey = 1, someOtherKey = 2)
empty    = dict()

empty.update(someDict) # {'someKey': 1, 'someOtherKey': 2}

Однако ключи должны быть уникальными, иначе обновление перезапишет существующие.Если ключи могут быть списками, вы также можете получить значение по умолчанию

someDict = dict(someKey = 1, someOtherKey = 2)
empty    = dict()
for key, value in someDict.items():
    empty[key] = empty.get(key, []) + [value]
print(empty) # {'someKey': [1], 'someOtherKey': [2]}

. Этот последний метод добавит значение, если ключ уже существует.Который может быть предпочтительным по сравнению с методом выше.Аналогичным образом его можно использовать для подсчета значения, связанного с ключом.

0 голосов
/ 14 декабря 2018

Есть несколько концепций, которые мы должны здесь рассмотреть.

  1. Мы должны передать recipe_bank в ChefEasy объект, который вы создаете.После этого мы можем вытащить любимый рецепт из вашего recipe_bank с помощью функции def favourites(self, my_fav).
  2. Вы должны исправить свою опечатку в строках:

    yes = ChefEasy("y)
    print(yes.save("Your meal has been saved!")
    

    Это должно быть:

    yes = ChefEasy("y")
    print(yes.save("Your meal has been saved!"))
    

Я попытаюсьчтобы исправить свой класс для вас в строках ниже:

recipe_bank = {"reciepe1":("1", "2", "3", "4", "5"),
               "reciepe2":["10 blah blah blah", "20", "30", "40", "50"]}
class ChefEasy():
    def __init__(self, recipe_dict):
        self.recipe_dict = recipe_dict
        self.favorite_dict = {}

    def favourites(self, recipe_list):
        for recipe in recipe_list:
            for key, value in self.recipe_dict.items():
                if recipe == key:
                    print ('Your favourite recipe has been saved')
                    self.favorite_dict[key] = value

    def displayfavdict(self):
        print (self.favorite_dict)
myChefEasy = ChefEasy(recipe_bank)
myChefEasy.favourites(['reciepe1'])

string = input('enter recipe list here, separated by comma: ') #reciepe2
myChefEasy.favourites(string.split(','))

myChefEasy.displayfavdict()
#{'reciepe1': ('1', '2', '3', '4', '5'), 'reciepe2': ['10 blah blah blah', '20', '30', '40', '50']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...