В языке Python структура данных под названием словарь (тип dict) занимает одну из ключевых позиций наряду с кортежами и списками. Словарь отличается гибкостью как у списка и неупорядоченностью в отличие от строк, списков и кортежей. Он содержит наборы пар "ключ:значение".

Термин "неупорядоченный" означает, что последовательность пар не имеет значения. Программа не учитывает положение элементов, поэтому доступ через индексы невозможен.

В других языках программирования такие структуры данных называются по-разному. В Java, к примеру, это отображения.

Для более наглядного понимания представьте словарь переводов языка — например, англо-русский. Каждое английское слово в нем имеет соответствующий русский перевод: cat – кошка, dog – собака, table – стол и т.д. В Python такой словарь можно выразить, указав английские слова в роли ключей, а русские — в роли значений:

        {'cat': 'кошка',
        'dog': 'собака', 
        'bird': 'птица', 
        'mouse': 'мышь'}

Отметьте использование фигурных скобок для обозначения словаря. Синтаксис Python для словарей таков:

Словарь в Python (схема)

Часто при выводе порядок пар "ключ:значение" может не совпадать с первоначальным вводом:

>>> a = {
        'cat': 'кошка', 
        'dog': 'собака', 
        'bird': 'птица', 
        'mouse': 'мышь'}
>>> a
{'dog': 'собака', 'cat': 'кошка', 'bird': 'птица', 'mouse': 'мышь'}

Поскольку порядок пар не имеет значения в словаре, интерпретатор выводит их произвольно. Так как же обращаться к значению, раз индексы недоступны? Обращение к значениям осуществляется через ключи с использованием квадратных скобок, как это принято для индексов в списках:

>>> a['cat']
'кошка'
>>> a['bird']
'птица'

Словари, подобно спискам, можно изменять: можно добавлять, редактировать и удалять элементы (пары "ключ:значение"). Словарь можно начать с пустого состояния (например, d = {}), а затем добавлять пары. Добавление и изменение выполняются одинаково: словарь[ключ] = значение. Если ключ присутствует, значение обновляется, если отсутствует — добавляется новая пара. Удаление осуществляется оператором del:

>>> a['elephant'] = 'бегемот' # добавляем
>>> a['table'] = 'стол' # добавляем
>>> a
{'dog': 'собака', 'cat': 'кошка', 'mouse': 'мышь', 'bird': 'птица', 'table': 'стол', 'elephant': 'бегемот'}
>>> a['elephant'] = 'слон' # изменяем
>>> del a['table'] # удаляем
>>> a
{'dog': 'собака', 'cat': 'кошка', 'mouse': 'мышь', 'bird': 'птица', 'elephant': 'слон'}

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

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

>>> nums = {1: 'one', 2: 'two', 3: 'three'}
>>> person = {'name': 'Tom', 1: [30, 15, 16], 2: 2.34, ('ab', 100): 'no'} 

Перебор элементов словаря с помощью цикла for

Как и для других сложных объектов в Python, элементы словаря можно перебрать с помощью цикла for, при этом по умолчанию извлекаются только ключи:

>>> nums
{1: 'one', 2: 'two', 3: 'three'}
>>> for i in nums:
...     print(i)
...
1
2
3

Ключи дают возможность получения значений:

>>> for i in nums:
...     print(nums[i])
...
one
two
three

Класс словарей включает метод items(), создающий специальную структуру, состоящую из кортежей, где каждый кортеж — это пара "ключ + значение":

>>> n = nums.items()
>>> n
dict_items([(1, 'one'), (2, 'two'), (3, 'three')])

Можно распаковывать кортежи прямо в цикле for, извлекая одновременно ключ и его значение:

>>> for key, value in nums.items():
...     print(key, 'is', value)
...
1 is one
2 is two
3 is three

Методы keys() и values() позволяют получить отдельно список ключей и значений. Когда нужно работать исключительно с ключами или значениями, обращайтесь к этим методам:

>>> v_nums = []
>>> for v in nums.values():
...     v_nums.append(v)
...
>>> v_nums
['one', 'two', 'three']

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

Помимо items(), keys() и values(), у словарей имеется ещё восемь методов. Это такие методы как clear(), copy(), fromkeys(), get(), pop(), popitem(), setdefault() и update().

Функция clear() устраняет все элементы из словаря, сохраняя пустое пространство для дальнейшего использования:

>>> a
{'dog': 'собака', 'cat': 'кошка', 'mouse': 'мышь', 'bird': 'птица', 'elephant': 'слон'}
>>> a.clear()
>>> a
{}

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

>>> nums2 = nums.copy()
>>> nums2[4] = 'four'
>>> nums
{1: 'one', 2: 'two', 3: 'three'}
>>> nums2
{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

Метод fromkeys() создает словарь из списка, где элементы становятся ключами. Эта функция применяется как к классу dict, так и к его объектам:

>>> a = [1, 2, 3]
>>> c = dict.fromkeys(a)
>>> c
{1: None, 2: None, 3: None}
>>> d = dict.fromkeys(a, 10)
>>> d
{1: 10, 2: 10, 3: 10}
>>> c
{1: None, 2: None, 3: None}

Метод get() возвращает элемент по ключу:

>>> nums.get(1)
'one'

Она эквивалентна nums[1].

Метод pop() удаляет элемент по ключу и возвращает его значение, а popitem() не требует аргументов и возвращает произвольную пару:

>>> nums.pop(1)
'one'
>>> nums
{2: 'two', 3: 'three'}
>>> nums.popitem()
(2, 'two')
>>> nums
{3: 'three'}

С помощью setdefault() можно добавить элемент в словарь:

>>> nums.setdefault(4, 'four')
'four'
>>> nums
    {3: 'three', 4: 'four'}

Так же, как команда nums[4] = 'four', если ключ 4 отсутствует в словаре. Если он есть, nums[4] = 'four' изменит его значение, но setdefault() этого не сделает.

Метод update() позволяет включать элементы из другого словаря в текущий:

>>> nums.update({6: 'six', 7: 'seven'})
>>> nums
{3: 'three', 4: 'four', 6: 'six', 7: 'seven'}

Метод обновляет значения уже существующих ключей и имеет множество дополнительных применений.

Практическая часть

  1. Создайте словарь, связанный с переменной school, и заполните его сведениями о количестве учащихся в различных классах (например, 1а, 1б, 2б, 6а, 7в). Измените словарь так: а) в одном из классов изменилось число учащихся, б) добавлен новый класс, в) один класс расформирован. Посчитайте общее количество учеников.
  2. Создайте словарь, где ключи представлены числами, а значения — строками. Используйте метод items() и передайте объект dict_items в функцию, которая создаст и возвратит новый словарь, в котором ключи станут значениями, а значения — ключами.

Вопросы для самопроверки:

  1. Что такое словарь в Python и в чем его основное отличие от списка?
  2. Как осуществляется доступ к значениям в словаре?
  3. Какие операции можно выполнять с элементами словаря?
  4. Какие типы данных могут использоваться в качестве ключей и значений в словарях?
  5. Что делает метод items() в словаре, и как его можно использовать?
  6. Какие методы словаря позволяют извлекать отдельно ключи и значения?
  7. Как метод update() влияет на существующие ключи при добавлении элементов из другого словаря?
  8. Как можно создать копию словаря и почему это может быть нужно?
  9. Что делает метод setdefault() в словарях?

Программа курса:

  1. Описание курса
  2. Эволюция и основы языков программирования

    История программирования в кратком и понятном изложении. Что такое машинный язык, почему появились ассемблеры, языки высокого уровня и объектно-ориентированные. Зачем нужен транслятор, и почему он может быть либо компилятором, либо интерпретатором.

  3. Знакомство с основами Python

    Особенности языка Python, работа в интерактивном режиме и подготовка файлов с исходным кодом.

  4. Типы данных и переменные в Python

    Базовые типы данных в Python: целое, вещественное числа, строки. Изменение типа данных с помощью встроенных функций. Понятие об операциях и переменных. Присваивание значения переменной.

  5. Ввод и вывод данных с Python функциями

    Для вывода на экран в Python 3.x используется функция print(). Вывод может быть предварительно отформатирован. Для ввода данных с клавиатуры используется функция input(), которая возвращает в программу строку.

  6. Логические выражения и операторы в Python

    Логические выражения. Логические операторы языка Python: == (равно), != (не равно), (больше), = (больше или равно), and (логическое И), or (логическое ИЛИ), not (отрицание).

  7. Ветвление и условные операторы в Python

    Управление потоком программы с помощью операторов if-else. Создание логических ветвлений, обработка условий и выполнение разных блоков кода в Python.

  8. Изучите обработку ошибок и исключений в Python

    Общее представление об ошибках и исключениях в языке программирования Python. SyntaxError, NameError, TypeError, ValueError, ZeroDivisionError. Обработка исключений с помощью инструкции try-except.

  9. Множественное ветвление с if-elif-else в Python

    Оператор множественного ветвления языка Python позволяет организовать более двух веток выполнения программы без необходимости вложения условных операторов друг в друга. Конструкция включает одну ветку if, произвольное количество elif и необязательную ветку else.

  10. Цикл while и его применение в Python

    С помощью циклов в программировании организуется многократное следующее друг за другом выполнение одних и тех же участков кода. Бывают циклы с условием и со счетчиком. К первым относится цикл while, или цикл "пока".

  11. Изучите функции и их применение в Python

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

  12. Локальные и глобальные переменные в Python

    В программировании важное значение имеет представление о локальных и глобальных переменных. Локальные переменные существуют внутри функций и не доступны за ее пределами. Глобальные переменные видны во всей программе.

  13. Оператор return и возврат значений в Python

    С помощью оператора return можно вернуть значение из тела функции в основную программу. В языке программирования Python можно вернуть несколько значений, перечислив их через запятую после оператора return. Также в функции может быть несколько return, но всегда выполняется только один из них.

  14. Параметры и аргументы функций в Python

    Если функция имеет параметры, то при вызове в нее можно передавать данные в виде аргументов-значений или аргументов-ссылок. Параметры перечисляются в заголовке функции в скобках после имени, представляют собой локальные переменные. В Python тип параметров не указывается, хотя в других языках это может быть обязательным требованием.

  15. Встроенные функции Python для работы

    Язык программирования Python включает множество встроенных функций. В предыдущих уроках мы использовали такие функции как print() и input(), а также функции преобразования типов данных. В этом уроке рассматриваются встроенные функции для работы с символами и числами.

  16. Использование модулей в Python

    Использование модулей в программировании позволяет изолировать код, выполняющий частные задачи, в отдельные файлы. После чего обращаться к нему из разных программ. Создание модулей - следующий шаг после функций, когда участок кода обособляется внутри одного файла-программы. Для языка Python есть множество встроенных и сторонних модулей.

  17. Генерация псевдослучайных чисел в Python

    Для генерации псевдослучайных чисел в языке программирования Python используются функции модуля random. Функция random() генерирует вещественное число от 0 до 1. Функции randint() и randrange() производят целые псевдослучайные числа в указанных диапазонах.

  18. Изучение списков в Python - основы и операции

    Списки в Python - это аналог массивов в других языках программирования. Однако список может содержать элементы разных типов. В терминологии Python список - это изменяемая упорядоченная структура данных. Можно заменять его элементы, добавлять и удалять их, брать срезы. В язык встроены методы для работы со списками.

  19. Изучение цикла for в Python

    Цикл for в языке программирования Python предназначен для перебора элементов структур данных (списков, словарей, кортежей, множеств) и многих других объектов. Это не цикл со счетчиком, каковым является for во многих других языках. Нередко цикл for используется совместно с функцией range(), генерирующей объекты-диапазоны.

  20. Строки в Python - методы и срезы

    В Python строки - это неизменяемые последовательности символов или подстрок. Из них, так же как из списков, можно извлекать отдельные символы с помощью индексов или подстроки с помощью взятия срезов. В языке Python есть множество встроенных строковых методов, позволяющих упростить обработку строк.

  21. Кортежи - неизменяемые структуры данных

    Кортежи в Python - это неизменяемые структуры данных, состоящие из элементов одного или разных типов. Кортежи подобны спискам и обычно используются для защиты последних от изменений. Преобразование одного в другой выполняется с помощью встроенных функций tuple() и list().

  22. Словари в Python - работа с ключами и значениями

    Словарь в Python - это изменяемая неупорядоченная структура данных, элементами которой являются пары "ключ:значение". В словари можно добавлять и удалять элементы, изменять значения ключей. В Python словари имеют ряд методов, упрощающих работу с ними.

  23. Работа с файлами в Python

    В языке программирования Python открытие файлов выполняется с помощью функции open(), которой передается два аргумента - имя файла и режим. Файл может быть открыт в режиме чтения, записи, добавления. Также может быть указан тип файла - текстовый или бинарный. Для файлов есть ряд встроенных методов чтения, записи и др.