Когда мы обрабатываем входящие потоки данных — будь то список email-адресов, ID или URL-ссылок, перед нами встает задача: нужно избавиться от повторяющихся записей, но при этом сохранить исходный порядок
Стандартный подход, используя
set(), безусловно, удалит все дубликаты, но у него есть побочный эффект: он полностью перемешивает элементы. А если порядок важен, то этот способ нам не подходитК счастью, Python предлагает эффективное решение, используя особенности работы со словарями
(dict)📌 С версии Python 3.7 (а фактически и с 3.6 в CPython) словари гарантированно сохраняют порядок вставки ключей
Используя метод
dict.fromkeys(последовательность), мы создаем словарь, где каждый элемент исходной последовательности становится ключом. При этом дубликаты игнорируются, и в словаре остаются только уникальные ключи, расположенные строго в том порядке, в котором они встретились впервыеСмотри, как это выглядит:
# Исходный список с повторяющимися данными
items = ["a", "b", "a", "c", "b"]
# Используем dict.fromkeys() и сразу преобразуем обратно в список
unique_ordered = list(dict.fromkeys(items))
# Результат: ['a', 'b', 'c'] — уникальные элементы с сохраненным порядком
▫️ Для удобства можно обернуть в функцию:
def get_unique_items_with_order(items):
"""Возвращает список уникальных элементов, сохраняя порядок их первого появления"""
return list(dict.fromkeys(items))
Дальше просто применяем
emails = ["a@mail.com", "b@mail.com", "a@mail.com"]
print(get_unique_items_with_order(emails))
# Вывод: ['a@mail.com', 'b@mail.com']
Получается довольно неплохо, без сложных циклов или лишних сортировок
🚀 Пост Guru Python: @sergey_filichkin_blog