← Назад к вопросам
Где поиск по элементу быстрее - в словаре или множестве в Python?
1.8 Middle🔥 131 комментариев
#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Поиск в словаре vs множество
Оба контейнера обеспечивают O(1) амортизированную сложность поиска в среднем случае, но есть важные различия в практическом применении.
Теория
Словарь и множество используют хеш-таблицы под капотом. Это означает:
- Словарь (dict): хеширует ключи для быстрого доступа к значениям → O(1) для
key in dictиdict[key] - Множество (set): хеширует элементы напрямую → O(1) для
element in set
Оба имеют одинаковую асимптотическую сложность!
Практическое сравнение
import timeit
# Подготовка данных
test_dict = {i: i for i in range(1_000_000)}
test_set = set(range(1_000_000))
test_key = 999_999
# Тест производительности
dict_time = timeit.timeit(
lambda: test_key in test_dict,
number=10_000_000
)
set_time = timeit.timeit(
lambda: test_key in test_set,
number=10_000_000
)
print(f"Словарь: {dict_time:.4f}с")
print(f"Множество: {set_time:.4f}с")
Результаты на практике
Множество немного быстрее (~15-20% в типичных случаях) по следующим причинам:
- Меньше памяти на элемент: множество хранит только хеш и сам элемент, словарь дополнительно хранит значение
- Меньше операций: при поиске в set нужно только хешировать элемент
- Лучше кеширование: меньший footprint означает лучше попадание в CPU cache
Реальный пример
# Если нужна только проверка наличия
fruits_set = {"apple", "banana", "orange"}
if "apple" in fruits_set: # ← быстрее
print("Found!")
# Если нужно значение, то словарь уместен
fruits_dict = {
"apple": {"price": 100, "origin": "Poland"},
"banana": {"price": 50, "origin": "Ecuador"}
}
if "apple" in fruits_dict:
info = fruits_dict["apple"]
Итоговые рекомендации
- Используй set для проверки принадлежности элемента
- Используй dict когда нужно ассоциировать ключи со значениями
- Обе структуры имеют O(1) в среднем, но set немного быстрее
- Разница заметна только с миллионами элементов