Как проверить, есть ли в словаре те же элементы, которые требуются из списка?

#python

#python

Вопрос:

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

После того, как пользователь выбрал нужные ему услуги, он переходит к оформлению заказа, где общая стоимость этих услуг суммируется, и он платит.

В настоящее время у меня есть функция, которая получает и сохраняет нужные пользователю сервисы из словаря:

 userInput = ""

servicesAvailableFull = {'Firewall Service' : 1.2, 'Security Ops Centre' : 4.2,
                         'Hot Site' : 8.5}
servicesAvailable = ["Firewall Service", "Security Ops Centre", "Hot Site"]
userAddedServices = []

print("    Welcome to Electronic Services and Protection:    ")

while userInput != "Q":
    menu()
    userInput = input("Please input your choice of action ('Q' to exit):  ")

    if userInput == "1":
        displayServices(servicesAvailableFull , servicesAvailable, userAddedServices)
        print(userAddedServices)

    elif userInput == "4":
        payment(userAddedServices, servicesAvailableFull)


def displayServices(availServiceFull, availService, serviceToAdd):
    userInput = ""
    counter = 1
    elementToTransfer = ""
    while userInput != "Q":
        print("n")
        print("Yes, we have the following service(s): ")
        for x, service in availServiceFull.items():
            print(f" {counter}.  {x}   : ${service}/year")
            counter  = 1
        userInput = input(
            "Enter the service(s) that you would like to add, or 'Q' to stop: ")
        try:
            if userInput.isnumeric()==False:
                raise ValueError
            #elif int(userInput) > int(len(userAddedServices)) or int(userInput) <= 0:
            #   raise ValueError
            else:
                 elementToTransfer = availService[int(userInput) - 1]
                 if elementToTransfer in serviceToAdd:
                    print("Sorry, you added that service already.")
                    counter = 1
                    continue
                 else:
                    serviceToAdd.append(elementToTransfer)
                    print(serviceToAdd)
                    counter = 1

        except ValueError:
            counter = 1
            print("Please enter a numeric value")
 

Прямо сейчас у меня есть список, содержащий службы, которые пользователь хочет добавить, и словарь, содержащий как услуги, так и цену услуг.

В настоящее время я работаю над payment() функцией, но я не уверен, как заставить программу распечатывать как услуги, которые пользователь хочет добавить, так и их соответствующую цену.

Вот так:

  1. Обслуживание брандмауэра: 1,2 тыс. долларов в год
  2. Операции по обеспечению безопасности: 4,2 тыс. долл. / год

Я могу печатать из списка, содержащего добавленные пользователем услуги, но я не уверен, как получить доступ к ценам из словаря.

Комментарии:

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

Ответ №1:

для доступа к значению словаря:

 x = {"elem": "value"}

print(x["elem"])
 

Вывод:

 "value"
 

Ответ №2:

Если ключи словаря совпадают с содержимым списка, это должно быть просто:

 for s in userAddedServices:
  price = servicesAvailableFull[s]
  print(f"{s} ${price}k/year")
 

Ответ №3:

Словарь состоит из 2 частей.

  1. Клавиша
  2. Значение

Это похоже на {‘key’: ‘value}

Вы можете перебрать его следующим образом

 for i, (key, value) in enumerate(servicesAvailableFull.items()):
    print(i 1, key, ':', value,'$/year') 

 

Это даст вам желаемый результат в виде

1 Обслуживание брандмауэра: 1,2 доллара в год

2 Центр управления безопасностью: 4.2 $ / год

3 Горячий сайт: 8.5 $ / год

Ответ №4:

Я думаю, что самый простой способ, когда я получаю ваш вопрос, — это сделать цикл ‘for’ по элементам в списке пользовательских служб. Доступ к значениям словаря с помощью метода dict[key]:

 for item in userAddedServices:
    print(f"{userAddedServices.index(item)   1}. {item} : ${servicesAvailableFull[item]}k/year.")
 

Для userAddedServices == servicesAvailable это возвращает:

  1. Обслуживание брандмауэра: 1,2 тыс. долл. / год.
  2. Центр управления безопасностью: 4,2 тыс. долл. / год.
  3. Горячий сайт: 8,5 тыс. долларов в год.