Как работает 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 шт):
Списки могут иметь дубликаты. А вот словари не могут. Эту особенность словарей Вы и используете для удаления дубликатов.
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))
По поводу того как работает 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
list_of_numbers = [22, 3,5,2,8,2,-23, 8,23,5]
without_dublicate = list(set(list_of_numbers))
print(without_dublicate)