Словарь (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.
Для того, чтобы получить значение словаря необходимо обратиться к ключу. Просто указать ключ в квадратных скобках.
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
Содержание: