Определение
Словарь (ассоциативный массив) — структура данных, позволяющая хранить пары вида «ключ — значение». Ключ — уникальный идентификатор, а значение может быть любой объектной переменной, включая другие структуры данных. Например, списки или другие словари. Ключи и значения могут выводиться в различном порядке, потому что словари не упорядочены.
Чтобы задать словарь, можно перечислить его элементы внутри фигурных скобок. Например, создадим словарь, используя в качестве ключей словаря названия стран, а в качестве значений по ключам — названия столиц этих стран:
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} |
dict.setdefault(key[, default]) |
Возвращает значение по ключу \(key\) из словаря \(dict\). Если ключа нет, то добавляет в словарь ключ со значением \(default\) и возвращает его. Если значение \(default\) не указано, то \(default\) — None |
>>> a = {'a': 1, 'b': 0, 'c': 2} |
dict.update([other]) |
Обновляет словарь парами ключ/значение из \(other\), перезаписав существующие ключи |
>>> a = {'a': 1, 'b': 0, 'c': 2} |
dict.pop(key[, default]) |
Удаляет ключ \(key\) из словаря \(dict\) и возвращает его значение. Если ключа нет, то возвращает значение \(default\). Если значение \(default\) не указано, то вызывает KeyError |
>>> a = {'a': 1, 'b': 0, 'c': 2} |
dict.popitem() |
Удаляет последнюю пару (ключ, значение) в словаре \(dict\) и возвращает кортеж (ключ, значение). Если словарь пустой, то вызывает KeyError |
>>> a = {'a': 1, 'b': 0, 'c': 2} |
dict.clear() |
Удаляет все ключи и значения в словаре \(dict\) |
>>> a = {'a': 1, 'b': 0, 'c': 2} |
dict.copy() |
Копирует словарь \(dict\) |
>>> a = {'a': 1, 'b': 0, 'c': 2} |
dict.keys() |
Возвращает итерируемый объект, состоящий из ключей словаря \(dict\) |
>>> a = {'a': 1, 'b': 0, 'c': 2} |
dict.values() |
Возвращает итерируемый объект, состоящий из значений словаря \(dict\) |
>>> a = {'a': 1, 'b': 0, 'c': 2} |
dict.items() |
Возвращает итерируемый объект, состоящий из кортежей (ключ, значение) словаря \(dict\) |
>>> a = {'a': 1, '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