Как работает fromkeys python?

Разбираю я одну задачу в python, а именно удаление дубликатов из списка. Решение словно я нашел, однако не могу разобраться, как оно работает. Можете объяснить данный код, правильно я понимаю, что списки в python не могут иметь дубликатов и метод fromkeys автоматически удаляет дубликаты?

list_of_numbers = [22, 3,5,2,8,2,-23, 8,23,5]
list_of_numbers = list(dict.fromkeys(list_of_numbers))
print(list_of_numbers)

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

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

Списки могут иметь дубликаты. А вот словари не могут. Эту особенность словарей Вы и используете для удаления дубликатов.

fromkeys — это не просто метод, это метод класса. Он принимает итерируемый объект, содержащий ключи, и возвращает новый объект словаря. То есть после его вызова Вы получите:

{22: None, 3: None, 5: None, 2: None, 8: None, -23: None, 23: None}

Так как это уже словарь, дубликатов в нём нет. И Вы преобразуете его обратно в список (через конструктор list). В качестве элементов списка будут использованы ключи словаря:

[22, 3, 5, 2, 8, -23, 23]

Кстати, дубликатов также не имеет множество (set), поэтому можно упростить Ваш код так:

list_of_numbers = [*{*list_of_numbers}]  # list(set(list_of_numbers))
→ Ссылка
Автор решения: Dmitry

По поводу того как работает fromkeys вам ответ дали. Но, чтобы убрать дубликаты из списка можно вопспользоваться типом данных set, который имеет только уникальные значения в наборе.

list_of_numbers = [22, 3,5,2,8,2,-23, 8,23,5]
list_of_numbers = list(set(list_of_numbers))
print(list_of_numbers)

# OUT
# [2, 3, 5, 8, -23, 22, 23]

Вы преобразуете список к типу set, а потом обратно в list

→ Ссылка
Автор решения: Eziz Gapbarov
list_of_numbers = [22, 3,5,2,8,2,-23, 8,23,5]
without_dublicate = list(set(list_of_numbers))
print(without_dublicate)
→ Ссылка