Посмотреть все уроки курса
Выбрать другой урок из курса
Поиск по сайту
Теория урока

7.1. Словари в Python

В предыдущем уроке мы познакомились со списками в языке Python. Но они не всегда могут помочь. Например, когда у нас имеются данные в виде ключ/значение, удобнее использовать словари.

Словари в Python напоминают ассоциативные массивы. В них так же уникальному значению ключа соответствует произвольное значение. В языке С++ ему аналогичен контейнер map. Как объявить словарь в Python? Он объявляется в фигурных скобках:

Пример
person = {"firstname": "Ivan",
          "lastname": "Ivanov",
          "age": 30}

print(person["firstname"])           

Сначала записывается ключ, а затем, через двоеточие, указывается значение. И ключ, и значение могут быть любым объектом языка Python. Кстати, пары ключ/значение необязательно писать на разных строках:

Пример
person = {"firstname": "Ivan", "lastname": "Ivanov", "age": 30}           

Как видите, такой способ записи словаря менее читабельный.

Обратите внимание на обязательное разделение пар запятыми. Причем запятую после последней пары можно как ставить, так и опустить – интерпретатор Python ее проигнорирует.

Как вы помните, в списках элементы хранятся в порядке добавления. В свою очередь, словарь пренебрегает порядком хранения элементов.

Чтобы обратиться к элементу из списка, вам необходимо указать индекс элемента в квадратных скобках. В словаре, вместо индекса, задается ключ, например:

Пример
person["firstname"] # => Ivan           

Обращение по ключу позволяет быстро находить необходимую информацию, независимо от размера словаря. Это возможно благодаря хорошо оптимизированным алгоритмам.

Чтобы понять, как динамически добавлять элементы в словарь, рассмотрим следующий пример:

Пример
person = {"firstname": "Ivan",
          "lastname": "Ivanov",
          "age": 30,}
print(person)
person["id"] = 1;
print(person)           

Как видите, чтобы добавить новый элемент в словарь, необходимо в квадратных скобках указать ключ и присвоить ему значение.

Допустим, нам необходимо посчитать количество определенных букв в заданной фразе:

Пример
word = "словарь - это не список"
letters = {"а": 0, "е": 0, "и": 0, "о": 0}

for letter in word:
    if letter in letters:
        letters[letter] = letters[letter] + 1
    
print(letters)           

Сначала мы объявляем словарь, в котором инициализируем наши буквы (то есть присвоим ноль, чтобы избежать ошибок, о которых мы поговорим позже). Далее перебираем все буквы фразы, и если такая буква есть в нашем словаре, то увеличиваем ее значение на единицу. Но что если наш словарь пустой и нам необходимо подсчитать частоту каждого символа в строке? Если оставить все как есть, то наш код работать не будет. Чтобы это устранить, необходимо кое-что добавить:

Пример
word = "словарь - это не список"
letters = {}

for letter in word:
    if letter in letters:
        letters[letter] += 1
    else:
        letters[letter] = 1
    
print(letters)           

Мы добавили ветку else, которая будет выполняться, если ключа letter нет в словаре и заменили строку, в которой увеличивалось значение на эквивалентную. Давайте еще более упростим наш код, используя оператор not in:

Пример
for letter in word:
    if letter not in letters:
        letters[letter] = 0
    letters[letter] += 1           

И это еще не все. Для таких случаев был специально придуман метод setdefault:

Пример
for letter in word:
    letters.setdefault(letter, 0)
    letters[letter] += 1           

Из этого урока вы узнали, чем различаются словари и списки в Python, когда и что использовать. Так же вы познакомились с методом setdefault.

<
×
>
Раздел «Знакомство с Python»
Урок 1.1. Первое знакомство с Python
Тест 1.2. Небольшой первый тест
Урок 1.3. Переменные и комментарии в Python
Тест 1.4. Тест по основным понятиям и работе с сайтом
Урок 2.1. Погружение в Python
Тест 2.2. Второй вводный тест по Python
Урок 2.3. Типы данных в Python
Урок 2.4. Форматирование строк в Python
Урок 2.5. Условная инструкция if-elif-else в Python
Урок 2.6. Преобразование и проверка типов в Python
Урок 2.7. Вызов методов цепочкой в Python
Урок 3.1. Первое знакомство с циклами в Python
Тест 3.2. Тест по циклам Python
Урок 4.1. Генерируем случайные числа на Python
Тест 4.2. Тест по модулю random Python
Урок 5.1. Структуры данных в Python
Тест 5.2. Тест по структурам Python
Урок 6.1. Списки в Python
Тест 6.2. Тест по спискам Python
Урок 6.3. Изменение списка на месте в Python
Урок 6.4. Дополнительно про списки в Python
Урок 6.5. Конкатенация и сортировка списков в Python
Тест 6.6. Заключительный тест по спискам в Python
Урок 7.1. Словари в Python
Вы здесь
Тест 7.2. Тест по словарям Python
Урок 7.3. Словари и списки: еще глубже
Урок 7.4. Перебор элементов словаря в Python
Урок 7.5. Внутреннее устройство и сортировка словаря в Python
Урок 7.6. Методы словарей и функция len() в Python
Тест 7.7. Заключительный тест по словарям
Урок 8.1. Множества в Python
Урок 8.2. Методы и особенности множеств в Python
Урок 8.3. Отношения между множествами и операции над ними
Тест 8.4. Тест по методам множеств в Python
Тест 8.5. Тест по операциям над множествами в Python
Урок 9.1. Кортежи в Python
Урок 9.2. Более подробно о кортежах в Python
Тест 9.3. Тест по кортежам в Python
Урок 10.1. Контроль хода выполнения программы в Python
Урок 10.2. Цикл while в Python
Урок 10.3. Операторы break, continue и pass в Python
Урок 10.4. Циклы for/else и while/else в Python
Урок 10.5. Обработка исключений (try/except) в Python
Тест 10.6. Тест по циклам и управляющим конструкциям
Тест 10.7. Тест по обработке исключений
Урок 10.8. Что дальше?