Удаление дубликатов из словаря 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 шт):
Попробуйте:
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}
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}
Можно так:
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}
А можно вообще не заморачиватся и вспомнить о том что в питоне есть несколько типов данных один из которых множества. Так вот в множестве не бывает дублей ))
d = {1: 1, 2: 1, 3: 2, 'test': 1}
new_d = set(d)
Получаем список уникальных значений без циклов и прочего питон сам уже всё сделал за нас )
Однострочник:
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}
Суть: меняю местами ключи и значения, перебирая словарь в обратном порядке (чтобы первые элементы затёрли последние), а потом меняю ключи и значения местами ещё раз.