Словарь (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; |
34 111 views