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


Словарь

Разберем еще один составной типа данных 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()