Пн. Июн 1st, 2026

Словари и хэш-таблицы

Основы работы со словарями

Словарь (ассоциативный массив, отображение) — это структура данных, которая хранит пары «ключ-значение». В Python словари реализованы с помощью хэш-таблиц, что обеспечивает быстрый доступ к элементам.

Ключ
Значение
«name»
«Alice»
«age»
25
«city»
«Moscow»

Пример структуры словаря: пары «ключ-значение»

Основные операции со словарями

Создание и доступ

# Создание словаря
student = {
    "name": "Alice",
    "age": 25,
    "city": "Moscow"
}

# Доступ к элементам
print(student["name"])  # Alice
print(student.get("age"))  # 25

# Добавление/изменение элемента
student["grade"] = "A"  # Добавляем новую пару
student["age"] = 26     # Изменяем существующее значение

# Проверка наличия ключа
if "city" in student:
    print("Город указан")

# Удаление элемента
del student["city"]

Методы словарей

student = {"name": "Alice", "age": 25, "city": "Moscow"}

# Получение всех ключей
keys = student.keys()
print(keys)  # dict_keys(['name', 'age', 'city'])

# Получение всех значений
values = student.values()
print(values)  # dict_values(['Alice', 25, 'Moscow'])

# Получение всех пар ключ-значение
items = student.items()
print(items)  # dict_items([('name', 'Alice'), ('age', 25), ('city', 'Moscow')])

# Удаление и возврат элемента
age = student.pop("age")
print(age)  # 25

# Очистка словаря
student.clear()
print(student)  # {}

Хэш-таблицы: принцип работы

Хэш-таблица — это структура данных, которая реализует ассоциативный массив. Она использует хэш-функцию для преобразования ключа в индекс массива, где хранится значение.

Ключ
«name»
Хэш-функция
hash(«name»)
Индекс
3
Значение
«Alice»

Принцип работы хэш-таблицы: ключ → хэш-функция → индекс → значение

# Простая реализация хэш-таблицы
class HashTable:
    def __init__(self, size):
        self.size = size
        self.table = [[] for _ in range(size)]
    
    def _hash(self, key):
        # Простая хэш-функция: сумма кодов символов по модулю размера таблицы
        return sum(ord(char) for char in str(key)) % self.size
    
    def put(self, key, value):
        index = self._hash(key)
        # Проверяем, не существует ли уже такой ключ
        for i, (k, v) in enumerate(self.table[index]):
            if k == key:
                self.table[index][i] = (key, value)
                return
        # Если ключ не найден, добавляем новую пару
        self.table[index].append((key, value))
    
    def get(self, key):
        index = self._hash(key)
        for k, v in self.table[index]:
            if k == key:
                return v
        return None

# Пример использования
ht = HashTable(10)
ht.put("name", "Alice")
ht.put("age", 25)
print(ht.get("name"))  # Alice
print(ht.get("age"))   # 25

Построение алфавитно-частотного словаря

Алфавитно-частотный словарь показывает, сколько раз каждый символ встречается в тексте. Это полезно для анализа текста, сжатия данных и криптографии.

def build_frequency_dict(text):
    freq_dict = {}
    for char in text:
        # Приводим символ к нижнему регистру для игнорирования регистра
        char_lower = char.lower()
        if char_lower.isalpha():  # учитываем только буквы
            if char_lower in freq_dict:
                freq_dict[char_lower] += 1
            else:
                freq_dict[char_lower] = 1
    return freq_dict

# Пример использования
text = "Hello World! Hello Python!"
frequency = build_frequency_dict(text)

# Вывод результатов в отсортированном виде
for char in sorted(frequency.keys()):
    print(f"'{char}': {frequency[char]}")
    
# Вывод:
# 'd': 1
# 'e': 2
# 'h': 3
# 'l': 5
# 'n': 2
# 'o': 4
# 'p': 1
# 'r': 1
# 't': 2
# 'w': 1
# 'y': 1
H
3
e
2
l
5
o
4
w
1

Визуализация частотного словаря для текста «Hello World»

# Улучшенная версия с использованием defaultdict
from collections import defaultdict

def build_frequency_dict_improved(text):
    freq_dict = defaultdict(int)
    for char in text:
        char_lower = char.lower()
        if char_lower.isalpha():
            freq_dict[char_lower] += 1
    return freq_dict

# Еще более краткая версия с использованием Counter
from collections import Counter

def build_frequency_dict_counter(text):
    # Фильтруем только буквы и приводим к нижнему регистру
    filtered_chars = [char.lower() for char in text if char.isalpha()]
    return Counter(filtered_chars)

# Пример использования
text = "Hello World! Hello Python!"
frequency = build_frequency_dict_counter(text)
print(frequency)  # Counter({'l': 5, 'o': 4, 'h': 3, 'e': 2, 'n': 2, 't': 2, 'd': 1, 'w': 1, 'r': 1, 'p': 1, 'y': 1})

Сравнение структур данных

Структура Вставка Поиск Удаление Применение
Список O(1) (в конец) O(n) O(n) Последовательности элементов
Множество O(1) O(1) O(1) Уникальные элементы, проверка принадлежности
Словарь O(1) O(1) O(1) Ассоциативные массивы, ключ-значение

Заключение

Словари и хэш-таблицы — мощные структуры данных, которые обеспечивают эффективное хранение и доступ к данным по ключу. Понимание их работы важно для решения многих задач в программировании и для успешной сдачи ЕГЭ по информатике.

Алфавитно-частотный словарь — практическое применение словарей для анализа текста. Этот навык полезен не только для экзамена, но и для реальных задач обработки текстовой информации.