Словари (dict) в Python

Словари (dict) в Python: создание, основные методы, функции и операции

Словарь (dictionary) — тип данных в Python состоящий из набора элементов с доступом по ключу.

Словари также называют ассоциативными массивами или хеш-таблицами.

В словарях данные хранятся в виде пар ключ-значение {key:value}.

Синтаксис словаря

Словари в Python выглядят следующим образом:

my_dict = { ключ1:значение1, ключ2:значение2, ....}

Ключи — всегда уникальные, они должны быть неизменяемого типа (строки, числа)
Значения — могут быть любыми и необязательно уникальными.

my_dict = {'ru': 'Россия', 'au': 'Австралия', 'is': 'Исландия'}
print(type(my_dict))
#<class 'dict'>

Применение словаря

Основное применение словаря — это хранение в нем значений с ключами и получение доступа к этим значениям по заданным ключам.

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

Способ 1. Создание словаря с помощью фигурных скобок

my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
print(my_dict)
#{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

Словари могу быть вложенными (т.е. словари внутри словарей):

my_dict = {
    1: {'Sasha': 35},
    2: {'Maxim': 30}
    }
print(my_dict)
#{1: {'Sasha': 35}, 2: {'Maxim': 30}}

Способ 2. Создание словаря с помощью функции dict()

Функция принимает переменные со значениями и создает из них словарь:

my_dict = dict(Sasha=35, Maxim=30, Ivan=20)
print(my_dict)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20}

Также эта функция работает и со списком кортежей из двух элементов (которые будут преобразованы в ключ:значение):

my_list = [('Sasha', 35), ('Maxim', 30), ('Ivan', 20)]
my_dict = dict(my_list)
print(my_dict)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20}

Или со вложенными списками:

my_list = [['Sasha', 35], ['Maxim', 30], ['Ivan', 20]]
my_dict = dict(my_list)
print(my_dict)
{'Sasha': 35, 'Maxim': 30, 'Ivan': 20}

Способ 3. Создание словаря с помощью метода dict.fromkeys(list, value)

В этом случае каждый ключ будет иметь одно и то же заданное значение:

my_list = ['key1', 'key2', 'key3']
my_dict = dict.fromkeys(my_list, 555)
print(my_dict)
#{'key1': 555, 'key2': 555, 'key3': 555}

Из списка берутся элементы, далее этот метод делает их ключами словаря, а значениями будут аргумент value.

Если его не указать, то получится такой словарь:

my_list = ['key1', 'key2', 'key3']
my_dict = dict.fromkeys(my_list)
print(my_dict)
#{'key1': None, 'key2': None, 'key3': None}

Способ 4. Создание словаря с помощью функции zip() вызванной внутри функции dict()

Для этого нужно два списка, один будет ключами словаря, а второй список — значениями. Если длина списков не совпадет, лишнее просто не будет использоваться для создания словаря.

key_list = ['key1', 'key2', 'key3']
value_list = ['value1', 'value2', 'value3']
my_dict = dict(zip(key_list, value_list))
print(my_dict)
#{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

Способ 5. Создание словаря с помощью генератора словарей

Создадим простой словарь в цикле:

my_dict = {a: a for a in range(5)}
print(my_dict)
#{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}

Мы создали числовой диапазон range от 0 до 4 и в словарь добавили ключи и значения от 0 до 4 циклом.

my_dict = {a: a+1 for a in range(5)}
print(my_dict)
#{0: 1, 1: 2, 2: 3, 3: 4, 4: 5}

Здесь ключами словаря мы сделали числа из range, а значениям добавили +1.

Работа со словарями в Python

Получение значений словаря

Для того, чтобы получить значение словаря необходимо обратиться к ключу. Просто указать ключ в квадратных скобках.

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict['Maxim'])
#30

Если обратиться к словарю по несуществующему ключу, то получим ошибку:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict['Petr'])
#builtins.KeyError: 'Petr'

Чтобы не получать таких ошибок при обращении по несуществующему ключу можно использовать метод dict.get(key[, default]).
Если запрошенного ключа не будет в словаре, то метод вернет default, если он не указан, то вернет None:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict.get('Petr', 'Not found'))
#Not found
my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict.get('Petr'))
#None

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

Чтобы добавить одиночный элемент в словарь нужно просто добавить новую пару ключ:значение:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict['Petr'] = 25
print(my_dict)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20, 'Petr': 25}

Чтобы добавить сразу несколько элементов в словарь можно использовать метода dict.update([other]):

В other передаем словарь, которые нужно добавить в существующий словарь:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict.update({'Nikita': 33, 'Roma': 18})
print(my_dict)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20, 'Nikita': 33, 'Roma': 18}

Или именованные аргументы:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict.update(Nikita=33, Roma=18)
print(my_dict)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20, 'Nikita': 33, 'Roma': 18}

Или список кортежей:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict.update([('Nikita', 33), ('Roma', 18)])
print(my_dict)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20, 'Nikita': 33, 'Roma': 18}

Обновление существующего значения в словаре

Для этого обращаемся к значению по ключу и передаем новое значение:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict['Ivan'] = 40
print(my_dict)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 40}

Чтобы обновить сразу несколько значений в словаре, используем метод dict.update([other]):

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict.update({'Sasha': 45, 'Maxim': 40})
print(my_dict)
#{'Sasha': 45, 'Maxim': 40, 'Ivan': 20}

Удаление элементов словаря

Есть несколько способов удаления элементов из словаря.

Способ 1. Удаление элемента с помощью оператора del

Указываем оператор del, далее имя словаря и в квадратных скобках ключ, после выполнения запись с этим ключем будет удалена:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
del my_dict['Ivan']
print(my_dict)
#{'Sasha': 35, 'Maxim': 30}

Способ 2. Удаление элемента с помощью метода dict.pop(key[, default])

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict.pop('Ivan')
print(my_dict)
#{'Sasha': 35, 'Maxim': 30}

Если удаляемого ключа нет в словаре, получим default, а если default не задан, то будет ошибка KeyError:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict.pop('Petr')
print(my_dict)
#builtins.KeyError: 'Petr'
my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
item = my_dict.pop('Petr', 'Not found')
print(my_dict)
print(item)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
#Not found

Также этот метод возвращает значение, которое было удалено из словаря:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
item = my_dict.pop('Ivan')
print(my_dict)
print(item)
#{'Sasha': 35, 'Maxim': 30}
#20

Способ 3. Удаление последнего элемента словаря методом dict.popitem()

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict.popitem()
print(my_dict)
#{'Sasha': 35, 'Maxim': 30}

Очистить и удалить словарь целиком

Для того, чтобы полностью удалить весь словарь используется оператор del:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
del my_dict
print(my_dict)
#builtins.NameError: name 'my_dict' is not defined

Чтобы удалить все значения словаря используется метод dict.clear():

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict.clear()
print(my_dict)
#{}

Проверка наличия ключа в словаре

Для того, чтобы узнать есть ли нужный ключ в словаре используется оператор in:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print('Maxim' in my_dict)
#True

Если ключа в словаре нет, то вернется False:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print('Roma' in my_dict)
#False

Другие методы словарей

Получить список кортежей пар словаря ключ:значение: dict.items()

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict.items())
#dict_items([('Sasha', 35), ('Maxim', 30), ('Ivan', 20)])

Получить список ключей словаря: dict.keys()

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict.keys())
#dict_keys(['Sasha', 'Maxim', 'Ivan'])

Получить список значений словаря: dict.values()

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict.values())
#dict_values([35, 30, 20])

Создание копии словаря: dict.copy()

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
my_dict_2 = my_dict.copy()
print(my_dict_2)
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20}

Получить значение ключа и если его нет, то создать: dict.setdefault(key[, default])

Метод проверяет, есть ли значение у ключа, если есть то возвращает его, если нет, то создает новый элемент словаря с ключом key и значением default (по умолчанию None):

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict.setdefault('Petr'))
print(my_dict)
#None
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20, 'Petr': None}
my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(my_dict.setdefault('Petr', 50))
print(my_dict)
#50
#{'Sasha': 35, 'Maxim': 30, 'Ivan': 20, 'Petr': 50}

Основные функции словарей

Длина словаря: len(dict)

Под длиной словаря в Python подразумевается количество пар ключ:значение:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(len(my_dict))
#3

Сортировка словаря: sorted(dict)

Получим сортированный список ключей словаря:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(sorted(my_dict))
#['Ivan', 'Maxim', 'Sasha']

Перебор словаря

Перебор ключей словаря с помощью цикла for:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
for key in my_dict:
    print(key)
#Sasha
#Maxim
#Ivan

Перебор словаря с помощью цикла for и метода dict.items()

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
for k, v in my_dict.items():
    print(k, v)
#Sasha 35
#Maxim 30
#Ivan 20

Перебор словаря с помощью цикла for и метода dict.keys()

Получим ключи словаря:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
for key in my_dict.keys():
    print(key)
#Sasha
#Maxim
#Ivan

Перебор словаря с помощью цикла for и метода dict.values()

Получим значения словаря:

my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
for values in my_dict.values():
    print(values)
#35
#30
#20

Содержание: