39. Обратный словарь со сменой ключей и значений
Условие задачи:
Написать функцию, которая принимает словарь и возвращает новый словарь, в котором ключи и значения поменяны местами.
Пример:
# {1: 2, 3: 4} -> {2: 1, 4: 3}
def reverse_dict(old_dict: dict):
new_dict = {}
Спойлеры к решению
Подсказки
- Нужно пройтись по парам
key, valueисходного словаря. - В новом словаре старое значение должно стать ключом.
- Старый ключ должен стать значением.
- Для обхода словаря удобно использовать
.items(). - Важно: значения исходного словаря должны быть хешируемыми, потому что в новом словаре они станут ключами.
- Если в исходном словаре есть одинаковые значения, в новом словаре останется только последняя пара.
Решение
def reverse_dict(old_dict: dict) -> dict:
new_dict = {}
for key, value in old_dict.items():
new_dict[value] = key
return new_dict
Пример использования:
old_dict = {
1: 2,
3: 4
}
print(reverse_dict(old_dict))
Результат:
{2: 1, 4: 3}
Функция проходит по исходному словарю и меняет местами ключи и значения. Например, пара 1: 2 превращается в 2: 1, а пара 3: 4 превращается в 4: 3.
Короткий вариант через dict comprehension:
def reverse_dict(old_dict: dict) -> dict:
return {
value: key
for key, value in old_dict.items()
}
Важно учитывать ситуацию с одинаковыми значениями:
old_dict = {
"a": 1,
"b": 1
}
print(reverse_dict(old_dict))
Результат будет:
{1: 'b'}
Так происходит потому, что ключи в словаре должны быть уникальными. Значение 1 становится ключом нового словаря, и последняя запись перезаписывает предыдущую.