Как циклически сдвинуть значения ключей в словаре?

Рейтинг: 2Ответов: 1Опубликовано: 07.02.2023

Изначально у нас есть такой словарь:

rooms = {'room_1': False, 'room_2': True, 'room_3': None}

Как циклически переместить значения ключей вправо/влево, чтобы вышло так:

rooms = {'room_1': None, 'room_2': False, 'room_3': True}

или так:

rooms = {'room_1': True, 'room_2': None, 'room_3': False}

Ответы

▲ 2Принят

Предложу такой вариант:

  1. Получаем значения ключей словаря в виде списка, при помощи функции .values()
  2. Перемещаем элементы полученного списка, при помощи конструкции со срезами, реализующей циклический сдвиг
  3. Группируем старые ключи с новыми сдвинутыми значениями, функцией zip()
  4. Создаем итоговый словарь, используя конструктор dict()

Код:

rooms = {'room_1': False, 'room_2': True, 'room_3': None}

def shift_dict_values(dct, shift):
    values = list(dct.values())
    return dict(zip(dct.keys(), values[-shift:] + values[:-shift]))

print(shift_dict_values(rooms, 1))
print(shift_dict_values(rooms, 2))

Вывод:

{'room_1': None, 'room_2': False, 'room_3': True}
{'room_1': True, 'room_2': None, 'room_3': False}