Удаление дубликатов из словаря python

Напишу программу для удаления дубликатов из словаря.
Например, для следующего словаря:

d = {1: 1, 2: 1, 3: 2, 'test': 1}

Вывод программы должен быть следующим:

d = {1: 1, 3: 2}

Мой код:

d = {1: 1, 2: 1, 3: 2, 'test': 1}
d = {d[item] for item in d}
print(d)

Получаю {1,2}

Мои уникальные значения становятся ключами. Помогите разобраться?


Ответы (5 шт):

Автор решения: gil9red

Попробуйте:

d = {1: 1, 2: 1, 3: 2, 'test': 1}
v_by_k = dict()
for k, v in d.items():
    if v not in v_by_k:
        v_by_k[v] = k

new_d = {v: k for k, v in v_by_k.items()}
print(new_d)
# {1: 1, 3: 2}
→ Ссылка
Автор решения: strawdog
d = {1: 1, 2: 1, 3: 2, 'test': 1}
res = {}
[res.update({k:v}) for k,v in d.items() if v not in res.values()]

res: {1: 1, 3: 2}

→ Ссылка
Автор решения: Jack_oS

Можно так:

d = {1: 1, 2: 1, 3: 2, 'test': 1}

values = set()
new_d = {}

for k, v in d.items():
    if v not in values:
        new_d.update({k: v})
        values.add(v)

результат в new_d:

new_d
{1: 1, 3: 2}
→ Ссылка
Автор решения: Sky

А можно вообще не заморачиватся и вспомнить о том что в питоне есть несколько типов данных один из которых множества. Так вот в множестве не бывает дублей ))

d = {1: 1, 2: 1, 3: 2, 'test': 1}

new_d = set(d)

Получаем список уникальных значений без циклов и прочего питон сам уже всё сделал за нас )

→ Ссылка
Автор решения: CrazyElf

Однострочник:

d = {1: 1, 2: 1, 3: 2, 'test': 1}

print({v:k for k,v in {d[k]:k for k in reversed(list(d))}.items()})

Вывод:

{1: 1, 3: 2}

Суть: меняю местами ключи и значения, перебирая словарь в обратном порядке (чтобы первые элементы затёрли последние), а потом меняю ключи и значения местами ещё раз.

→ Ссылка