Как внутри цикла сменить ключ-значение, когда кончаются значения подходящие под условие?

Задача заключается в том, что бы когда к примеру все 'Двухместные' значения были удалены из списка словаря, юзеру давало свободный 'Трёхместный' и так далее. Возможно вы найдёте альтернативный подход к решению задачи, за что тоже буду благодарен, единственное условие - это обязательное применение словаря и цикла(можно for).

RESERVATION = {'Двухместные': 'A1 A2 A3 A4 A5 A6'.split(),
            'Трёхместные': 'B1 B2 B3 B4 B5'.split(),
            'Четырехместные': 'C1 C2 C3 C4 '.split(),
            'Пятиместные': 'D1 D2 D3 '.split()}

flag = True
while flag:
    print('Сколько вас будет человек?(1-10)')
    users = int(input('Нас будет\t'))
    if users > 10:
        print('Не более 10 человек!')
        continue
    if users <= 5:
        if users == 1 or users == 2:
            made = RESERVATION['Двухместные'].pop()
            print('Ваш столик %s \n' % made)
        elif users == 3:
            made = RESERVATION['Трёхместные'].pop()
            print('Ваш столик %s \n' % made)
        elif users == 4:
            made = RESERVATION['Четырехместные'].pop()
            print('Ваш столик %s \n' % made)
        elif users == 5:
            made = RESERVATION['Пятиместные'].pop()
            print('Ваш столик %s \n' % made)
    elif users > 5:
        print('Подождите')
        flag = False

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

Автор решения: Sergei Malanin
RESERVATION = {2: 'A1 A2 A3 A4 A5 A6'.split(),
               3: 'B1 B2 B3 B4 B5'.split(),
               4: 'C1 C2 C3 C4 '.split(),
               5: 'D1 D2 D3 '.split()}

while True:
    print('Сколько вас будет человек?(1-10)')
    users = int(input('Нас будет\t'))
    if users > 10:
        print('Не более 10 человек!')
        continue
    if users <= 5:
        for k, v in RESERVATION.items():
            if users <= k and v:
                print(f"Ваш столик:{RESERVATION[k].pop()}")
                break
    elif users > 5:
        print('Подождите, вас слишком много.')

    print("Доступные столики")
    for k, v in RESERVATION.items():
        print(f"{k} местные: {v}")
    print("*" * 20)

Из вашего описания непонятно что делать если больше 5.

→ Ссылка
Автор решения: Andy Pavlov

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

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

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

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

reservation = {2: 'A1 A2 A3 A4 A5 A6'.split(),
            3: 'B1 B2 B3 B4 B5'.split(),
            4: 'C1 C2 C3 C4 '.split(),
            5: 'D1 D2 D3 '.split()}

table_types = sorted(list(reservation))


def table_reservation(tables: dict, guests: int):
    while guests > 0:
        try:
            count = max([t for t in tables if guests - t >= 0 and tables[t]])
        except ValueError:
            count = next((t for t in tables if tables[t]), None)
        if not count:
            print(f'Все столики кончились, число ожидаюших {guests}')
            break
        table = tables[count].pop(0)
        print(f'Ваш столик {table} \n')
        guests -= count
    return tables

print('Сколько вас будет человек?(1-10)')
users = int(input('Нас будет\t'))
free_tables = table_reservation(reservation, users)
print(free_tables)

Вывод

Сколько вас будет человек?(1-10)
Нас будет   16
Ваш столик D1 
Ваш столик D2 
Ваш столик D3 
Ваш столик A1 

{2: ['A2', 'A3', 'A4', 'A5', 'A6'], 3: ['B1', 'B2', 'B3', 'B4', 'B5'], 4: ['C1', 'C2', 'C3', 'C4'], 5: []}

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

def table_reservation(tables: dict, guests: int):
    while guests > 0:
        count = next((t for t in tables if guests - t >= 0 and tables[t]), None)
        if not count:
            print(f'Все столики кончились, число ожидаюших {guests}')
            break
        table = tables[count].pop(0)
        print(f'Ваш столик {table} \n')
        guests -= count
    return tables

тогда раздача пойдет со столов А к D

→ Ссылка