Словари или ассоциативные массивы

Разберем еще один составной типа данных Python, называемый словарем, который похож на список в том смысле, что он представляет собой набор объектов.
Словари и списки имеют следующие характеристики:
  • оба изменяемы
  • оба являются динамическими (могут увеличиваться и уменьшаться в размереме по мере необходимости)
  • оба могут быть вложенными (список может содержать другой список, словарь может содержать другой словарь, словарь также может содержать список, и наоборот)
Словари отличаются от списков прежде всего тем, как осуществляется доступ к элементам:
  • доступ к элементам списка осуществляется по их положению в списке через индексацию.
  • жоступ к элементам словаря осуществляется с помощью ключей.
Словари - это структура данных, реализованная в Python, более известная как ассоциативный массив. Словарь состоит из набора пар ключ-значение. Каждая пара "ключ-значение" сопоставляет ключ с соответствующим значением.


Создание словаря

Вы можете определить словарь, заключив список пар ключ-значение, разделенный запятыми, в фигурные скобки ({}). Двоеточие (:) отделяет каждый ключ от связанного с ним значения:
d = {
    <key>: <value>,
    <key>: <value>,
      .
      .
      .
    <key>: <value>
}
можете создать словарь с помощью встроенной dict()функции. Аргумент dict()должен быть последовательностью пар ключ-значение. Для этого хорошо подходит список кортежей:
d = dict([
    (<key>, <value>),
    (<key>, <value),
      .
      .
      .
    (<key>, <value>)
])
Вывести содержимое списка на экран можно просто командой print()
Записи в словаре отображаются в том порядке, в котором они были созданы.

Доступ к элементам словаря


Чтобы работать с элементами словаря, они должны быть как-то доступны. Если вы не можете получить их по индексу, то как их получить?
Значение извлекается из словаря путем указания соответствующего ключа в квадратных скобках ([]).
Например, вывод на экран столицу Абхазии из созданного в предыдущем задании словаря
print(dict_country['Abkhazia'])
Если вы ссылаетесь на ключ, которого нет в словаре, Python вызывает исключение:
print(dict_country['Russia'])
Traceback (most recent call last): File "<...>", line ..., in <module>
    print(dict_country['Russia'])
KeyError: 'Russia'

 

Добавление элементов в словарь

Для добавления записи в существующий словарь достаточно просто назначить новый ключ и значение
dict_country['Russia'] = 'Moscow'
 

Обновление записи в словаре

Если вы хотите обновить запись, вы можете просто присвоить новое значение существующему ключу
dict_country['Russia'] = 'Москва'
 

Удаление записи из словаря

Чтобы удалить запись, используйте оператор del, указав ключ для удаления
del dict_country[<ключ>]

Хотя доступ к элементам в словаре не зависит от порядка, Python гарантирует, что порядок элементов в словаре сохраняется. При отображении элементы будут отображаться в том порядке, в котором они были определены, и повторение ключей также будет происходить в этом порядке. Элементы, добавленные в словарь, добавляются в конце. Если элементы удаляются, порядок остальных элементов сохраняется.

Следует запомнить, что ключи словаря как и элементы словаря могут быть разного типа. Словарь может быть и такого содержимого:
d = {42: [2, 3, 6, 7], 2.78: 'bbb', True: 1}
print(d[42][1])    # 3 - для доступа к вложенным элементам используйте дополнительный ключ или индекс

Некоторые методы, с которыми Вы знакомились при изучении строк, списков и кортежей также работают со словарями.
Например, метод in (или not in) позволяет определить есть ли определенный ключ в словаре.

А также позволяет пройтись по всем ключам словаря.
for key in dict_country:
   print(key)
Также можно провести итерацию по парам "ключ - значение", используя метод items().
for key, value in dict_country.items():
   print(key, value)
Другие, часто используемые методы приведены в таблице
 
Название Метод Описание (пример)
объединение len() возвращает число элементов в словаре 
len(dict_country)
обновление словаря update() позволяет обновить сразу несколько пар словаря
dict_country.update({'Russia': 'Москва', 'Armenia': 'Ереван'})
получение значения по ключу get() позволяет получить значение по указанному ключу. Можно использовать для проверки наличия того или иного ключа в словаре
dict_country.get('Russia')    # возвращает значение по ключу,
                              # если такого ключа нет, то вернет None
dict_country.get('Russa', 0)    # если ключа Russia нет, то вернет 0
                                # (вместо 0 можно задать любое значение
удаление ключа pop() Метод pop() удаляет ключ и возвращает соответствующее ему значение.
dict_country.pop('Bahamas')
ключи словаря  keys() Метод keys() возвращает коллекцию ключей в словаре.
dict_country.keys()
значения словаря values() Метод values() возвращает коллекцию значений в словаре.
dict_country.values()
пары словаря items() Метод items() возвращает коллекцию значений в словаре.
dict_country.items()