Как из словаря удалить элемент внутри другого словаря?

Вот мой код:

shop = {'мучное': {'хлеб': 200},'молочные': {'сыр': 200}}

for section in shop.values():
    print(section)
    print(type(section))
    section.pop('хлеб')

Traceback (most recent call last):
  File "C:\Users\User\Desktop\python\test.py", line 5, in <module>
    section.pop('хлеб')
KeyError: 'хлеб'

Вот сама ошибка. Допустим надо удалить "сыр" из раздела молочные. Сыр удаляется, но сам раздел остаётся. Помогите пожалуйста.


Ответы (2 шт):

Автор решения: CrazyElf

Примерно так:

shop = {'мучное': {'хлеб': 200},'молочные': {'сыр': 200}}
del_list = ['сыр']

for sk, section in list(shop.items()):
    print(section)
    print(type(section))
    for k in set(section.keys()):
        if k in del_list:
            del section[k]
            print('удалён товар', k)
    if not section:
        del shop[sk]
        print('удалён раздел', sk)

Вывод:

{'хлеб': 200}
<class 'dict'>
{'сыр': 200}
<class 'dict'>
удалён товар сыр
удалён раздел молочные

Содержимое shop после выполнения кода:

{'мучное': {'хлеб': 200}}
→ Ссылка
Автор решения: Shamus Rezol

dict.pop

If key is not found and default argument is not specified - KeyError exception is raised

Замените section.pop('хлеб') на section.pop('хлеб', None).

Потом можно пройтись по всем разделам еще раз и удалить пустые.

→ Ссылка