Определение

Словарь (ассоциативный массив) — структура данных, позволяющая хранить пары вида «ключ — значение». Ключ — уникальный идентификатор, а значение может быть любой объектной переменной, включая другие структуры данных. Например, списки или другие словари. Ключи и значения могут выводиться в различном порядке, потому что словари не упорядочены.

 

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

countries = {"Беларусь": "Минск", "Россия": "Москва", "Франция": "Париж"}

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

 

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

 

Для создания пустого словаря следует использовать функцию dict() без аргументов, либо просто указав пустые фигурные скобки. А для определения количества ключей в словаре используется функция len():

empty_dict = {}
n = len(empty_dict)
print(f"Длина пустого словаря равна {n}.")

Вывод программы:

Длина пустого словаря равна 0.

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

d = {"a": 5, "b": 0, "c": 2}
x = d["c"]
print(f"{x}")

Вывод программы:

2

Если же нужно добавить новый ключ в словарь, то его указывают после имени словаря в левой части операции присваивания, а значение, которое будет храниться по этому ключу, — в правой части:

d = {"a": 5, "b": 0, "c": 2}
d["z"] = 1
print(f"{d}")

Вывод программы:

{'a': 5, 'b': 0, 'c': 2, 'z': 1}

При записи значения по уже существующему ключу он создаётся заново с новым значением, а прошлый стирается:

d = {2: 28}
d[2] = 29
print(f"{d[2]}")

Вывод программы:

29

При попытке взять значение по несуществующему ключу происходит исключение KeyError:

d = {2: 28}
print(f"{d[1]}")

Вывод программы:

KeyError: 1

Для проверки существования ключа в словаре следует использовать оператор in:

countries = {"Беларусь": "Минск", "Россия": "Москва", "Франция": "Париж"}
if "Сербия" in countries:
    print(f"{countries['Сербия']}")
else:
    print(f"Страна пока не добавлена в словарь")

Для создания нового словаря с объединенными ключами и значениями словарей \(d1\) и \(d2\) следует использовать оператор |:

d1 = {"a": 5, "b": 0, "c": 1}
d2 = {"a": 3, "d": 4}
d = d1 | d2
print(f"{d}")

Вывод программы:

{'a': 3, 'b': 0, 'c': 1, 'd': 4}

Значения словаря \(d2\) имеют приоритет, чем значения словаря \(d1\).

 

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

Метод Описание Пример
dict.get(key[, default]) Возвращает значение по ключу \(key\) из словаря \(dict\). Если ключа нет, то возвращает значение \(default\). Если значение \(default\) не указано, то возвращает None
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> b = a.get('c')
>>> b
2
dict.setdefault(key[, default]) Возвращает значение по ключу \(key\) из словаря \(dict\). Если ключа нет, то добавляет в словарь ключ со значением \(default\) и возвращает его. Если значение \(default\) не указано, то \(default\) — None
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> b = a.setdefault('d', 1)
>>> a
{'a': 1, 'b': 0, 'c': 2, 'd': 1}
>>> b
1
dict.update([other]) Обновляет словарь парами ключ/значение из \(other\), перезаписав существующие ключи
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> a.update({'b': 4, 'd': 3})
>>> a
{'a': 1, 'b': 4, 'c': 2, 'd': 3}
dict.pop(key[, default]) Удаляет ключ \(key\) из словаря \(dict\) и возвращает его значение. Если ключа нет, то возвращает значение \(default\). Если значение \(default\) не указано, то вызывает KeyError
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> b = a.pop('d', 4)
>>> b
4
dict.popitem() Удаляет последнюю пару (ключ, значение) в словаре \(dict\) и возвращает кортеж (ключ, значение). Если словарь пустой, то вызывает KeyError
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> b = a.popitem()
>>> a
{'a': 1, 'b': 0}
>>> b
('c', 2)
dict.clear() Удаляет все ключи и значения в словаре \(dict\)
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> a.clear()
>>> a
{}
dict.copy() Копирует словарь \(dict\)
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> b = a.copy()
>>> b
{'a': 1, 'b': 0, 'c': 2}
dict.keys() Возвращает итерируемый объект, состоящий из ключей словаря \(dict\)
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> b = a.keys()
>>> b
dict_keys(['a', 'b', 'c'])
dict.values() Возвращает итерируемый объект, состоящий из значений словаря \(dict\)
>>> a = {'a': 1, 'b': 0, 'c': 2}
>>> b = a.values()
>>> b
dict_values([5, 0, 2])
dict.items() Возвращает итерируемый объект, состоящий из кортежей (ключ, значение) словаря \(dict\)
>>> a = {'a': 1, 'b': 0}
>>> b = a.items()
>>> b
dict_items([('a', 5), ('b', 0)])

Обход словаря

Перебор ключей

d = {"a": 5, "b": 0, "c": 2}
for key in d:
    print(f"{key}")

Вывод программы:

a
b
c
d = {"a": 5, "b": 0, "c": 2}
for key in d.keys():
    print(f"{key}")

Вывод программы:

a
b
c

Перебор значений

d = {"a": 5, "b": 0, "c": 2}
for value in d.values():
    print(f"{value}")

Вывод программы:

5
0
2

Перебор пар ключ/значение

d = {"a": 5, "b": 0, "c": 2}
for key, value in d.items():
    print(f"{key} {value}")

Вывод программы:

a 5
b 0
c 2

Практические задания