← Все вопросы

Как инвертировать словарь — поменять ключи и значения местами?

Задан 16 месяцев назад691 просмотров3 ответа
15

Есть {'a': 1, 'b': 2}, хочу получить {1: 'a', 2: 'b'}. Как это сделать одной строкой и какие тут подводные камни?

3 ответа

24
✓ Принятый ответ — помог автору

Словарное включение:

d = {'a': 1, 'b': 2}
inv = {v: k for k, v in d.items()}
# {1: 'a', 2: 'b'}

Главный подводный камень: значения становятся ключами, а ключи должны быть уникальными. Если в исходном словаре два ключа имеют одинаковое значение — после инверсии останется только один (последний по порядку перезапишет предыдущий). И ещё значения должны быть хешируемыми (числа, строки, кортежи — да; списки — нет).

Alex Buh про потерю дублей не подумал, спасибо, поймал бы баг 🙏 · 15 месяцев назад
7

{v: k for k, v in d.items()}.

5

Если значения повторяются и нужно сохранить все ключи — собирай в список: inv.setdefault(v, []).append(k).

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект