Как извлечь ключи с их значениями и добавить значения для печати итогов в словаре Python? - PullRequest
2 голосов
/ 20 октября 2019

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

malesuada: 14,00 $
Извините, у нас нет пиццы
меценаты: 12,00

общая стоимость: 26,00

menu_items = {
    'nulla aliquam': 15.00,
    'malesuada': 14.00,
    'feugiat ipsum': 9.00,
    'maecenas': 12.00,
    'fermentum mass': 23.00
}
ordered_items = {
    'maecenas',
    'pizza',
    'malesuada'
}
for item in ordered_items:
    if item in menu_items.keys():
      print(item)
    else:
      print("sorry we dont have ",item)

Ответы [ 2 ]

2 голосов
/ 20 октября 2019

Две вещи:

  • Вам не нужно использовать .keys(), чтобы проверить, существует ли ключ в словаре

  • Выполучить доступ к цене, используя словарь индексации: dictionary[key] -> value

total = 0
for item in ordered_items:
    if item in menu_items:
        print('{} : ${:2f}'.format(item, menu_items[item]))
        total += menu_items[item]
    else:
        print('Sorry we don\'t have {}'.format(item))

print('Total price : ${:2f}'.format(total))
0 голосов
/ 20 октября 2019

Вы можете использовать понимание списка, чтобы получить цены меню пунктов в ordered_items, обратите внимание, что структура, которую вы создали для ordered_items, представляет собой set, а не словарь.

menu_items = {
    'nulla aliquam': 15.00,
    'malesuada': 14.00,
    'feugiat ipsum': 9.00,
    'maecenas': 12.00,
    'fermentum mass': 23.00
}
ordered_items = {
    'maecenas',
    'pizza',
    'malesuada'
}

totalPrice = sum([v for k,v in menu_items.items() if k in ordered_items])
print(totalPrice)

Вывод:

26.0

Понимание списка - это просто лучший способ выполнить цикл for ниже:

Редактировать Для вашей спецификации печати каждого элемента взаказ.

total_price = 0 
for item in ordered_items:
    if item in menu_items:
        print(f"{item} : ${menu_items[item]} ")
        total_price += menu_items[item]
    else:
        print(f"Sorry, we don't have {item}")
print(f'Total : ${total_price}')

Вывод:

меценаты: 12,0

Извините, у нас нет пиццы

malesuada: 14,0

Итого: $ 26,0

Чтобы напечатать все это в одной строке, добавьте каждый оператор к одной строке в каждом цикле и напечатайте это в конце:

total_price = 0 
printString = ''
for item in ordered_items:
    if item in menu_items:
        printString += f"{item} : ${menu_items[item]} "
#        print(f"{item} : ${menu_items[item]} ")
        total_price += menu_items[item]
    else:
#        print(f"Sorry, we don't have {item}")
        printString += f"Sorry, we don't have {item} "
#print(f'Total : ${total_price}')
printString +=  f"Total : ${total_price} "

print(printString)

Вывод:

меценаты: 12,0 $ Извините, у нас нет пиццы malesuada: 14,0 $ Итого: 26,0

...