Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Словари: храним данные по именам, а не по номерам

💻 Информатика · 9 класс

Словарь (dict) сопоставляет каждому ключу значение: вместо «элемент номер 3» — «оценки Ани» или «цена банана». Разберём создание, чтение, метод get и частотный анализ слов.

Электронная таблица LibreOffice Calc
Электронная таблица LibreOffice CalcOwn work (conteúdo), The Document Foundation and Canonical (window and controls) · Wikimedia Commons · CC0

Идея словаря

Список индексируется числами: marks[0]. Словарь индексируется ключами: marks['Аня']. Ключ должен быть хешируемым: подходят обычные строки, числа и кортежи из хешируемых элементов. Список не подходит; кортеж с вложенным списком тоже вызовет TypeError. Ключи уникальны: если присвоить существующему ключу новое значение, старое будет забыто. Пустой словарь создают фигурными скобками data = {}.

Пример 1. Журнал оценок

def make_journal():
    return {'Аня': [5, 4], 'Борис': [3, 5, 5]}

def add_mark(journal, name, mark):
    journal.setdefault(name, [])
    journal[name].append(mark)
    return journal

def average_mark(journal, name):
    marks = journal.get(name)
    if not marks:
        return None
    return sum(marks) / len(marks)

Метод setdefault сначала проверяет: если ключа нет, он создаёт пустой список; затем append добавляет оценку. Так новый ученик появляется в журнале автоматически, без лишних if. Метод get возвращает None (или заданное значение по умолчанию), если ключа нет — это способ избежать ошибки KeyError.

Обращение journal['Вера'] при отсутствующем ключе выбросит KeyError. Поэтому перед обращением проверяйте условие 'Вера' in journal или используйте get.

Словарь не сортируется сам

Важно не путать два факта. С Python 3.7 гарантирован порядок вставки: словарь помнит, в каком порядке пары добавлялись. Но автоматической сортировки по алфавиту или по значению нет! Для упорядоченного вывода используйте встроенную функцию sorted: sorted(d) отсортирует ключи, sorted(d.items()) — пары. Повторное присваивание существующего ключа не меняет его позицию, а удалённый и заново добавленный ключ переходит в конец.

Пример 2. Частотный словарь

Классическая задача — посчитать, сколько раз каждое слово встретилось в тексте.

def count_words(text):
    counts = {}
    for word in text.lower().split():
        counts[word] = counts.get(word, 0) + 1
    return counts

print(count_words('Мама мыла мама раму'))
# {'мама': 2, 'мыла': 1, 'раму': 1}

Идея в одной строке: получить старое значение (если слова ещё не было — 0) и прибавить 1. Для непустого словаря самое частое слово можно найти через max(counts, key=counts.get). Пустой словарь нужно обработать отдельно: max без значения по умолчанию вызовет ValueError. При равной частоте здесь выбирается первый из максимальных ключей в порядке обхода. Подсчёт разделяет слова только пробелами: пунктуация пока остаётся частью слова.

Проверь себя

  1. Что выведет d = {'a': 1}; d['a'] = 2; print(d)? Ответ: {'a': 2} — старое значение перезаписано.
  2. Как прочитать значение, не рискуя получить KeyError? Ответ: d.get('ключ') вернёт None, а d.get('ключ', 0) — 0 при отсутствии ключа.
  3. d = {'б': 1, 'а': 2}. Что вернёт sorted(d) и почему? Ответ: ['а', 'б'] — sorted возвращает новый отсортированный список ключей, сам словарь при этом не изменится.
  4. Можно ли ключом сделать список? Ответ: нет — списки изменяемы, возникнет TypeError. Подойдут строки, числа и кортежи из хешируемых элементов.

Кратко о главном

Словарь хранит пары ключ: значение; ключи уникальны и должны быть хешируемыми. d.get возвращает значение по умолчанию для отсутствующего ключа; неверный нехешируемый ключ всё равно вызовет TypeError. Порядок вставки сохраняется (с Python 3.7), но сортировку делает только функция sorted. Частотный словарь — универсальный приём для подсчёта чего угодно.

Связанные материалы

Источники и материалы