Компактное сжатие словаря
Написал функцию, она создает модифицированный словарь:
d1 = {1 : 2, 3 : 4, 5 : 4, 7 : 2, 9 : 4}
def swap_dict (d):
rd = {}
for k, v in d.items():
rd[v] = rd.get(v, []) + [k]
return rd
print(swap_dict(d1))
Теперь как решить другой вопрос: Надо написать функцию, которая создаёт компактную версию словаря. Одним словом, ключи сгруппированы по исходному значению в кортежах.
Пример: словарь {1: 2, 3: 4, 5: 4, 7: 2, 9: 4},
сжатый в {(3, 9, 5): 4, (1, 7): 2}
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
sd = swap_dict(d1)
res = {tuple(v):k for k, v in sd.items()}
res, соответственно:
{(1, 7): 2, (3, 5, 9): 4}
Автор решения: Alexander Chernin
→ Ссылка
# Исходный словарь
d = {1: 2, 3: 4, 5: 4, 7: 2, 9: 4}
# промежуточный
r = {}
for key, value in d.items():
if value not in r:
r[value] = tuple()
r[value] += (key,)
# результат
res = {v: k for k, v in r.items()}
print(res) # {(3, 9, 5): 4, (1, 7): 2}