2.6 Отображения \ Словари#
Последний тип данных, который мы отнесли к коллекциям, - это отображения. В Python отображения представлены таким типом данных, как словари - dict.
Словарь в Python - это неупорядоченная изменяемая коллекция, которая хранит пары ключ-значение. Неупорядоченность означает, что у словаря невозможно обратиться к значению по индексу. Также важно отметить, что ключи должны быть уникальными и неизменяемыми (например, строки, числа или кортежи), а значения могут быть любого типа данных.
Создание словаря#
Для определения словаря, как и в случае с множествами, используется перечислиние в фигурных скобках. Единственное отличие, что через запятую перечисляются не просто значения, а именно пары, разделенные двоеточием:
new_dict = {"Russia": "Moscow", "USA": "Washington"}
print(new_dict)
{'Russia': 'Moscow', 'USA': 'Washington'}
Часто в рамках задач нужно будет не использовать готовые словари, а создавать пустые и заполнять их в процессе. Для создания пустого словаря можно пользоваться двумя вариантами:
empty_dict = dict()
empty_dict_2 = {}
print(empty_dict)
print(empty_dict_2)
{}
{}
Получение данных из словаря#
В отличие от последовательностей, где элемент можно было получить по его порядковому номеру, словари неупорядочены, и у них нет обращения по индексам, вместо этого имеется обращение по ключу.
Для обращения по ключу есть несколько способов:
указать нужный ключ в квадратных скобках -
dict[key]использовать метод get -
dict.get(key, value_if_no_key)использовать метод setdefault -
dict.setdefault(key, create_value_if_no_key)
point = {"x": 10, "y": 12, "z": 5}
x = point["x"] # такое обращение по ключу, которого не существует, вызовет ошибку.
y = point.get("y") # обращение по ключу, которого не существует, вернет None. Безопасный способ
m = point.get("m", "ключ отсутствует") # обращение по ключу, которого не существует, вернет второй аргумент
print(x, y, m)
10 12 ключ отсутствует
m = point.setdefault("m", 100) # если ключа не существует, то он будет создан. После этого вернет значение по ключу
print(point, m)
{'x': 10, 'y': 12, 'z': 5, 'm': 100} 100
В реальных задачах, чтобы обезопасить себя от ошибок, в случаях, когда нужно получить конкретное значения по ключу, стоит использовать метод get. Также возникают ситуации, когда требуется получить список всех ключей или значений, для этого у словаря есть специальные методы:
keys()- метод, возвращающий список ключейvalues()- метод, возвращающий список значенийitems()- метод, возвращающий пары значений(key, value)
point = {"x": 10, "y": 12, "z": 12}
keys = point.keys() # на самом деле возвращает специальный тип данных dict_keys
print(keys)
print(list(keys)) # dict_keys можно преобразовать к обычному списку
dict_keys(['x', 'y', 'z'])
['x', 'y', 'z']
point = {"x": 10, "y": 12, "z": 12}
values = point.values() # на самом деле возвращает специальный тип данных dict_values
print(values)
print(list(values)) # dict_values можно преобразовать к обычному списку
dict_values([10, 12, 12])
[10, 12, 12]
point = {"x": 10, "y": 12, "z": 12}
items = point.items() # на самом деле возвращает специальный тип данных dict_items
print(items)
print(list(items)) # dict_items можно преобразовать к обычному списку
dict_items([('x', 10), ('y', 12), ('z', 12)])
[('x', 10), ('y', 12), ('z', 12)]
Изменение словаря#
Для обновления конкретного ключа можно использовать конструкцию, аналогичную тому, как изменяется значение по индексу в списке:
point = {"x": 10, "y": 12, "z": 5}
point["z"] = 100 # если ключ уже существовал, то обновит его значение
print(point)
{'x': 10, 'y': 12, 'z': 100}
Примечательно, что если при использовании такой инструкции указать несуществующий ключ, то ошибки не произойдет, а просто будет создан новый ключ:
point = {"x": 10, "y": 12, "z": 5}
point["t"] = 100 # если ключа нет в словаре, он будет создан
print(point)
{'x': 10, 'y': 12, 'z': 5, 't': 100}
Также один словарь можно обновлять с использованием другого словаря.
Так, для обновления словаря используется метод update, принимающий в качестве аргумента ещё один словарь. В результате команды a.update(b) - для совпадающих ключей значения будут обновлены, а ключи из b, отсутствующие в a, будут созданы с соответствующими значениями.
point = {"x": 10, "y": 12, "z": 12}
zm_point = {"z": 5, "m": 100}
point.update(zm_point) # ключ z - обновится, ключ m - добавится
print(point)
{'x': 10, 'y': 12, 'z': 5, 'm': 100}
Методы словарей
С полным перечнем методов словарей и примерами их использования можно ознакомиться в справочном материале.
Практические задания