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