Python предоставляет составной тип данных, называемый словарем (dict). Словари – это реализация структуры данных в Python, которая более широко известна как ассоциативный массив. Словарь состоит из набора пар ключ-значение. Каждая пара ключ-значение сопоставляет ключ с соответствующим значением.
Вы можете определить словарь, заключив разделенный запятыми список пар ключ-значение в фигурные скобки {}. Двоеточие : отделяет каждый ключ от связанного с ним значения:
Вы можете определить словарь, заключив разделенный запятыми список пар ключ-значение в фигурные скобки {}. Двоеточие : отделяет каждый ключ от связанного с ним значения:
names_and_ages = {
'Ivan': 24,
'Elen': 21,
'Oleg': 18
}
Вы также можете создать словарь с помощью встроенной функции dict(). Аргументом для dict() должна быть последовательность пар ключ-значение. Список кортежей хорошо подходит для этого:
names_and_ages = dict([
('Ivan', 24),
('Elen', 21),
('Oleg', 18)
])
Еще один способ определить словарь, в случае, если ключи представляют собой простые строки:
names_and_ages = dict(
Ivan=24,
Elen=21,
Oleg=18
)
Доступ к значениям словаря
Значения словаря должны быть каким-то образом доступны. Но, мы не можем получить их по индексам, как в списках. Как тогда получить доступ к значениям, которые хранятся в словарях? Значение извлекается из словаря путем указания соответствующего ключа в квадратных скобках []. Если вы ссылаетесь на ключ, которого нет в словаре, Python вызывает исключение:
>>> names_and_ages = dict(Ivan=24, Elen=21, Oleg=18)
>>> names_and_ages
{'Ivan': 24, 'Elen': 21, 'Oleg': 18}
>>> names_and_ages['Elen']
21
>>> names_and_ages['Oleg']
18
>>> names_and_ages['Svetlana']
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
names_and_ages['Svetlana']
KeyError: 'Svetlana'
Пример добавления нового элемента в словарь:
>>> names_and_ages['Svetlana'] = 19
>>> names_and_ages
{'Ivan': 24, 'Elen': 21, 'Oleg': 18, 'Svetlana': 19}
Пример обновления значения элемента в словаре:
>>> names_and_ages['Oleg'] = 30
>>> names_and_ages
{'Ivan': 24, 'Elen': 21, 'Oleg': 30, 'Svetlana': 19}
Пример удаления элемента из словаря:
del names_and_ages['Oleg']
>>> names_and_ages
{'Ivan': 24, 'Elen': 21, 'Svetlana': 19}
Методы словарей
Как и в случае со строками и списками, существует несколько встроенных методов, которые могут быть вызваны в словарях.
clear()
Метод очищает словарь от всех пар ключ-значение
>>> langs = {'Питон': '3.8', 'Сишарп': '10'}
>>> langs
{'Питон': '3.8', 'Сишарп': '10'}
>>> langs.clear()
>>> langs
{}
get([, ])
Метод get() предоставляет удобный способ получения значения ключа из словаря без предварительной проверки, существует ли ключ, и без возникновения ошибки. d.get(<key>) выполняет поиск <key> в словаре d и возвращает соответствующее значение, если оно найдено. Если <key> не найден, он возвращает None:
>>> d = {'Пайтон': 3.8, 'Сишарп': 10, 'С++': 11}
>>> print(d.get('Пайтон'))
3.8
>>> print(d.get('Java'))
None
Если ключ не найден и указан аргумент по умолчанию, то это значение возвращается вместо None:
>>> d = {'Пайтон': 3.8, 'Сишарп': 10, 'С++': 11}
>>> print(d.get('Java', -1))
-1
items()
d.items() возвращает список кортежей, содержащих пары ключ-значение в словаре d. Первый элемент в каждом кортеже – это ключ, а второй элемент – значение ключа:
>>> d = {'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> d
{'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> list(d.items())
[('Питон', 10), ('Паскаль', 20), ('Бейсик', 30)]
>>> list(d.items())[1][0]
'Паскаль'
>>> list(d.items())[1][1]
20
keys()
Возвращает список ключей в словаре
>>> d = {'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> d
{'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> list(d.keys())
['Питон', 'Паскаль', 'Бейсик']
values()
Возвращает список значений в словаре
>>> d = {'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> d
{'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> list(d.values())
[10, 20, 30]
pop()
Удаляет ключ из словаря, если он присутствует, и возвращает его значение. Метод d.pop(<ключ>) вызывает исключение KeyError, если <ключ> отсутствует в d:
>>> d = {'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> d
{'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> d.pop('Питон')
10
>>> d
{'Паскаль': 20, 'Бейсик': 30}
>>> d.pop('Котлин')
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
d.pop('Котлин')
KeyError: 'Котлин'
popitem()
d.popitem() удаляет последнюю пару ключ-значение, добавленную в d, и возвращает ее в виде кортежа. Если d пуст, d.popitem() вызывает исключение KeyError:
>>> d = {'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> d
{'Питон': 10, 'Паскаль': 20, 'Бейсик': 30}
>>> d.popitem()
('Бейсик': 30)
>>> d
{'Питон': 10, 'Паскаль': 20}
>>> de = {}
>>> de.popitem()
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
de.popitem()
KeyError: 'popitem(): dictionary is empty'
update(obj)
Объединяет словарь с другим словарем или с итератором пар ключ-значение.
Если параметр <obj> является словарем, d.update(<obj>) объединяет записи из <obj> в d.
И для каждого ключа в <obj>
- Если ключ отсутствует в d, пара ключ-значение из <obj> добавляется в d.
- Если ключ уже присутствует в d, соответствующее значение в d для этого ключа обновляется до значения из <obj>.
>>> dict1 = {'a': 1, 'b': 2, 'c': 3}
>>> dict2 = {'b': 20, 'd': 40}
>>> dict1.update(dict2)
>>> dict1
{'a': 1, 'b': 20, 'c': 3, 'd': 40}
Заключение
В этой статье мы рассмотрели основные свойства словарей в Python и узнали, как получать доступ к данным словарей и манипулировать ими.
Списки и словари – это два наиболее часто используемых типа Python. Как вы видели, они имеют несколько общих черт, но отличаются тем, как осуществляется доступ к их элементам. Доступ к элементам списков осуществляется по числовому индексу, а к элементам словаря – по ключу.
Из-за этих различий списки и словари, как правило, подходят для разных случаев.