Как циклически сдвинуть значения ключей в словаре?
Изначально у нас есть такой словарь:
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}
Ответы (1 шт):
Автор решения: Павел
→ Ссылка
Предложу такой вариант:
- Получаем значения ключей словаря в виде списка, при помощи функции
.values() - Перемещаем элементы полученного списка, при помощи конструкции со срезами, реализующей циклический сдвиг
- Группируем старые ключи с новыми сдвинутыми значениями, функцией
zip() - Создаем итоговый словарь, используя конструктор
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}