Словарь (dictionary) в языке Python является изменяемым (mutable) типом данных, который может содержать в себе любое количество объектов, включая другие типы, такие как словари. Словари состоят из пар ключ:значение .
Так же, их называют “ассоциативными массивами” (associative arrays) или “хеш-таблицами” (hash tables).
Строго говоря – словари не являются последовательностями, т.к. доступ к элементам словаря осуществляется не по индексу, а по ключу.
Синтаксис словаря такой:
>>> dict ={'Alice':'2341','Beth':'9102','Cecil':'3258'} >>> dict {'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
Создаётся словарь таким образом:
>>> dict1 ={'abc':456}; >>> dict2 ={'abc':123,98.6:37}; >>> print dict1, dict2 {'abc': 456} {98.6: 37, 'abc': 123}
Каждый ключ (key) в словаре отделяется от его значения (value) двоеточием (“:
“), а элементы словаря (пара ключ:значение) разделяются запятой. Создать пустой словарь можно просто указав две фигурные скобки, например:
>>> dict = {} >>> print dict {}
Обязательное условие словаря – имя каждого ключа должно быть уникальным (в отличии от значений). Значения могут быть любых типов, однако ключи должны быть неизменяемым типом, например – список, число или кортеж.
Содержание
Получения данных из словаря
Для получения доступа к элементу словаря вы можете использовать уже привычные квадратные скобки с указанием в них ключа, значение которого необходимо получить:
>>> dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; >>> >>> print "dict['Name']: ", dict['Name']; dict['Name']: Zara >>> print "dict['Age']: ", dict['Age']; dict['Age']: 7
При попытке получить значение из словаря по ключу, которого не существует – интерпретатор сообщит об ошибке:
>>> dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; >>> >>> print "dict['Alice']: ", dict['Alice']; dict['Alice']: Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'Alice'
Обновление данных в словаре
Вы можете обновить словарь добавляя в него новые элементы (т.е. пару ключ:значение), изменив существующий элемент или удалив его:
>>> dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; >>> >>> dict['Age'] = 8; # update existing entry >>> dict['School'] = "DPS School"; # Add new entry >>> >>> >>> print "dict['Age']: ", dict['Age']; dict['Age']: 8 >>> print "dict['School']: ", dict['School']; dict['School']: DPS School
Удаление элементов словаря
Вы можете либо удалить один элемент в словаре, или полностью очистить его содержимое, либо – полностью удалить словарь:
>>> dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; >>> del dict['Name']; # удаляем запись у которой ключ 'Name' >>> print dict['Name'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'Name'
>>> dict.clear() # удаляем всё содержимое словаря >>> print dict {}
>>> dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; >>> print dict['Name'] Zara >>> del dict ; # удаляем весь словарь >>> print dict['Name'] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'type' object has no attribute '__getitem__'
Свойства ключей в словаре
Для значений в словаре нет никаких ограничений. Они могут являться произвольным объектом языка Python, либо любым другим объектом, заданным пользователем. По другому обстоит дело с ключами.
Есть два наиболее важных правила, которые следует учитывать при работе с ключами в словарях:
(a) Не допустимо использование более одного ключа в словаре. Если вы укажете два ключа с одинаковым именем – будет использовано то, которые было присвоено позже:
>>> dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}; >>> >>> print "dict['Name']: ", dict['Name']; dict['Name']: Manni
(b) Ключи должны являться неизменяемыми объектами. Вы можете использовать строки, числа или кортежи в качестве ключей словаря, но нельзя использовать, например, список (который является изменяемым объектом). Т.е. указать, к примеру, ключ как ['key']
– не выйдет:
>>> dict = {['Name']: 'Zara', 'Age': 7}; Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list' >>> >>> print "dict['Name']: ", dict['Name']; dict['Name']: Manni
Встроенные функции и методы словарей
В Python имеются такие встроенные функции для работы со словарями:
SN | Function with Description |
---|---|
1 | cmp(dict1, dict2) сравнение двух словарей; |
2 | len(dict) получение длины словаря – т.е. количество пар ключ:значение (элементов); |
3 | str(dict) создаёт строкове представление словаря; |
4 | type(variable) возвращает тип переданного объекта; если объект является словарём – вернёт ‘dict’; |
В Python имеются такие встроенные методы для работы со словарями:
SN | Methods with Description |
---|---|
1 | dict.clear() удаляет все элементы словаря dict; |
2 | dict.copy() возвращает копию словаря dict; |
3 | dict.fromkeys() создаёт новый словарь с ключами из из переданной последовательности seq; |
4 | dict.get(key, default=None) возвращает значение для ключа key, или значение заданное в default, если ключа нет в словаре; |
5 | dict.has_key(key) возвращает true, если ключ key присутствует в словаре dict, или false – если нет; |
6 | dict.items() возвращает кортеж, содержащий пары ключ:значение словаря dict; |
7 | dict.keys() возвращает список ключей словаря dict; |
8 | dict.setdefault(key, default=None) подобен методу get(), но утсановит dict[key]=default, если ключ key не найден в словаре; |
9 | dict.update(dict2) добавляет пары ключ:значение из словаря dict2 в словарь dict; |
10 | dict.values() возвращает список значений из словаря dict; |