← Все вопросы

Как развернуть словарь, если значения повторяются (не уникальны)?

Задан 18 месяцев назад522 просмотров2 ответа
13

Обычная инверсия {v: k for k, v in d.items()} теряет данные, потому что у меня одинаковые значения у разных ключей, и они затирают друг друга. Хочу, чтобы для каждого значения собрался список всех его ключей.

d = {"a": 1, "b": 2, "c": 1}
# нужно {1: ["a", "c"], 2: ["b"]}

2 ответа

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

Простая инверсия не подходит, потому что при дублях значений ключи перезаписываются. Собирай в список через defaultdict(list):

from collections import defaultdict
inv = defaultdict(list)
for k, v in d.items():
    inv[v].append(k)
# {1: ['a', 'c'], 2: ['b']}

Так ни один ключ не потеряется. Если значения у тебя гарантированно уникальны — тогда хватит и однострочника {v: k for k, v in d.items()}.

7

Через setdefault без импорта: inv.setdefault(v, []).append(k) в цикле.

Ваш ответ

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