← Все вопросы
Как развернуть словарь, если значения повторяются (не уникальны)?
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) в цикле.
Ваш ответ
Войдите, чтобы ответить на вопрос.