Наряду со списками и кортежами Python имеет еще одну встроенную структуру данных, которая называется словарь (dictionary). В ряде языков программирования есть похожие структуры (словарь в C#, ассоциативный массив в PHP).
Как и список, словарь хранит коллекцию элементов. Каждый элемент в словаре имеет уникальный ключ, с которым ассоциировано некоторое значение.
Определение словаря имеет следующий синтаксис:
dictionary = { ключ1:значение1, ключ2:значение2, ....}
Определим пару словарей:
users = {1: "Tom", 2: "Bob", 3: "Bill"} elements = {"Au": "Золото", "Fe": "Железо", "H": "Водород", "O": "Кислород"}
В словаре users в качестве ключей используются числа, а в качестве значений — строки. В словаре element в качестве ключей используются строки.
Но необязательно ключи и строки должны быть однотипными. Они могу представлять разные типы:
objects = {1: "Tom", "2": True, 3: 100.6}
Мы можем также вообще определить пустой словарь без элементов:
objects = {}
или так:
objects = dict()
Преобразование из списка в словарь
Несмотря на то, что словарь и список — непохожие по структуре типы, но тем не менее существует возможности для отдельных видов списков преобразования их в словарь с помощью встроенной функции dict(). Для этого список должен хранить набор вложенных списков. Каждый вложенный список должен состоять из двух элементов — при конвертации в словарь первый элемент станет ключом, а второй — значением:
users_list = [ ["+111123455", "Tom"], ["+384767557", "Bob"], ["+958758767", "Alice"] ] users_dict = dict(users_list) print(users_dict) # {"+111123455": "Tom", "+384767557": "Bob", "+958758767": "Alice"}
Подобным образом можно преобразовать в словарь двухмерные кортежи, которые в свою очередь содержать кортежи из двух элементов:
users_tuple = ( ("+111123455", "Tom"), ("+384767557", "Bob"), ("+958758767", "Alice") ) users_dict = dict(users_tuple) print(users_dict)
Получение и изменение элементов
Для доступа к элементам словаря необходимо использовать ключ:
dictionary[ключ]
Например, получим и изменим элементы в словаре:
users = { "+11111111": "Tom", "+33333333": "Bob", "+55555555": "Alice" } # получаем элемент с ключом "+11111111" print(users["+11111111"]) # Tom # установка значения элемента с ключом "+33333333" users["+33333333"] = "Bob Smith" print(users["+33333333"]) # Bob Smith
Если при установки значения элемента с таким ключом в словаре не окажется, то произойдет его добавление:
users["+4444444"] = "Sam"
Но если мы попробуем получить значение с ключом, которого нет в словаре, то Python сгенерирует ошибку KeyError:
user = users["+4444444"] # KeyError
И чтобы предупредить эту ситуацию перед обращением к элементу мы можем проверять наличие ключа в словаре с помощью выражения ключ in словарь. Если ключ имеется в словаре, то данное выражение возвращает True:
key = "+4444444" if key in users: user = users[key] print(user) else: print("Элемент не найден")
Также для получения элементов можно использовать метод get, который имеет две формы:
get(key)
: возвращает из словаря элемент с ключом key. Если элемента с таким ключом нет, то возвращает значение Noneget(key, default)
: возвращает из словаря элемент с ключом key. Если элемента с таким ключом нет, то возвращает значение по умолчанию defaultkey = "+55555555" user = users.get(key) user = users.get(key, "Unknown user")