Обратный словарь со сменой ключей и значений

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 становится ключом нового словаря, и последняя запись перезаписывает предыдущую.