Словари в Python
В этом руководстве вы узнаете всё о словарях в Python: как их создавать, как добавлять, удалять, как получать из них элементы, а еще познакомитесь со встроенными методами словарей.
Словарь — это неупорядоченный набор элементов. Элемент словаря представляет собой пару ключ: значение . Словари оптимизированы для получения значений по заданному ключу.
Как создать словарь
Чтобы создать словарь в Python, необходимо прописать элементы внутри фигурных скобок <> и разделить их запятыми.
В элементе содержится ключ и соответствующее значение, они записываются так: (ключ: значение) .
В словарях значения могут повторяться и быть любого типа. Ключи же повторяться не могут и должны быть неизменяемым типом (строками, числовыми типами и кортежами с неизменяемыми элементами).
# пустой словарь my_dict = <> # словарь с ключами — целочисленными значениями my_dict = # словарь с ключами разных типов my_dict = # используем dict() my_dict = dict() # словарь из последовательности, где элементы являются парами my_dict = dict([(1,'яблоко'), (2,'мяч')])
Как вы увидели выше, мы можем создать словарь с помощью встроенной функции dict() .
Как получить элементы из словаря
В отличие от других типов данных, где для доступа к элементам используется индексация, в словаре используются ключи. Они используются внутри квадратных скобок или в качестве аргумента метода get() .
При использовании квадратных скобок и отсутствии элемента в словаре вызывается ошибка KeyError. При использовании метода get() и отсутствии элемента возвращается None .
# get vs. [] для получения элементов my_dict = # Вывод: Jack print(my_dict['Имя']) # Вывод: 26 print(my_dict.get('Возраст')) # Попытка получить ключ, которого не существует, приводит к ошибке # Вывод: None print(my_dict.get('Адрес')) # KeyError print(my_dict['Адрес'])
Вывод:
Ваня
26
None
Traceback (most recent call last):
File "", line 15, in
print(my_dict['Адрес'])
KeyError: 'Адрес'
Как изменить или добавить элементы в словаре
Словари — изменяемый тип данных. Это значит, что в него можно добавить новые элементы или изменить уже существующие с помощью оператора присваивания.
Если добавляемый ключ есть в словаре, значение элемента изменяется. Если же такого ключа еще нет, то в словарь добавляется новая пара (ключ: значение) .
# Изменение словаря my_dict = # обновляем значение my_dict['Возраст'] = 27 # Вывод: print(my_dict) # добавляем элемент my_dict['Адрес'] = 'Центр города' # Вывод: print(my_dict)
Вывод:
Как удалить элементы из словаря
Удалить нужный элемент словаря по ключу можно с помощью метода pop() . Этот метод удаляет элемент с соответствующим ключом и возвращает значение.
Удалить произвольную пару (ключ, значение) можно с помощью метода popitem() . Очистить весь словарь за один раз можно с помощью метода clear() .
Также можно использовать ключевое слово del для удаления отдельных элементов или же всего словаря.
# создаем словарь squares = # удаляет определенный элемент, возвращает его значение # Вывод: 16 print(squares.pop(4)) # Вывод: print(squares) # удаляет произвольный элемент, возвращает (ключ, эзначение) # Вывод: (5, 25) print(squares.popitem()) # Вывод: print(squares) # удаляет все элементы squares.clear() # Вывод: <> print(squares) # удаляет весь словарь del squares # выдает ошибку print(squares)
Вывод:
16
(5, 25)
<>
Traceback (most recent call last):
File "", line 30, in
print(squares)
NameError: name 'squares' is not defined
Методы словарей
В таблице ниже указаны доступные методы словарей. Некоторые из них мы уже использовали в примерах выше.
Метод
Что делает
Удаляет все элементы из словаря
Возвращает неглубокую копию словаря
Возвращает словарь с ключами из seq и значениями, равными v (по умолчанию None )
Возвращает значение ключа key . Если key не существует, возвращает d (по умолчанию None )
Возвращает новый объект элементов словаря в формате (ключ, значение)
Возвращает новый объект с ключами словаря
Удаляет элемент с ключом key и возвращает его значение или d , если key не найден. Если d не было обозначено и key не найден, вызывает ошибку KeyError.
Удаляет и возвращает произвольную пару (ключ, значение) . Вызывае ошибку KeyError, если словарь пустой.
Если ключ key есть в словаре, возвращает соответствующее ему значение. Если нет, добавляет в словарь элемент с ключом key и значением d и возвращает d (по умолчанию None )
Обновляет словарь имеющимися парами ключ/значение из other , перезаписывая существующие ключи
Возвращает новый объект со значениями словаря
marks = <>.fromkeys(['математика', 'русский язык', 'физика'], 0) # Вывод: print(marks) for item in marks.items(): print(item) # Вывод: ['русский язык', 'математика', 'физика'] print(list(sorted(marks.keys())))
Вывод:
('математика', 0)
('русский язык', 0)
('физика', 0)
['русский язык', 'математика', 'физика']
Представление словарей
Представление словарей — элегантный и лаконичный способ создать новый словарь из итерируемого объекта.
Представление словарей состоит из выражения ключ: значение , за которым следует for , и всё это — внутри фигурных скобок <> .
Создадим словарь с парами чисел и их квадратов в качестве элементов:
squares = print(squares)
Вывод:
То же самое можно сделать иначе, но так будет длинее:
squares = <> for x in range(6): squares[x] = x*x print(squares)
Вывод:
В представлении словарей выражений for и if опционально может быть больше.
Необязательное выражение if поможет отфильтровать элементы для создания нового словаря.
Давайте создадим словарь только с квадратами только нечетных чисел:
# Представление словарей с опциональным if odd_squares = print(odd_squares)
Вывод:
Другие операции со словарями
Проверка на вхождение в словарь
Проверить, есть ли ключ в словаре, можно с помощью ключевого слова in . Отметим, что проверку на вхождение можно провести только над ключами, не над значениями
squares = # Вывод: True print(1 in squares) # Вывод: True print(2 not in squares) # Проверка на вхождение позволяет проверять только ключи, не значения # Вывод: False print(49 in squares)
Вывод:
True
True
False
Итерирование по словарю
Мы можем пройтись по всем ключам словаря, используя цикл for .
squares = for i in squares: print(squares[i])
Вывод:
1
9
25
49
81
Встроенные функции для словарей
Встроенные функции all() , any() , len() , cmp() , sorted() и т. д. часто используются со словарями для разных задач.
Функция
Описание
Возвращает True , если все ключи словаря = True (или если словарь пуст)
Возвращает True , если хотя бы один ключ словаря = True . Если словарь пуст, возвращает False .
Возвращает длину (количество элементов) словаря
Сравнивает элементы двух словарей (не работает в Python 3)
Возвращает новый список с отсортированными ключами словаря
# Встроенные функции для словарей squares = # Вывод: False print(all(squares)) # Вывод: True print(any(squares)) # Вывод: 6 print(len(squares)) # Вывод: [0, 1, 3, 5, 7, 9] print(sorted(squares))
Вывод:
False
True
6
[0, 1, 3, 5, 7, 9]
Создание словаря из отдельных списков ключей и значений в Python
В работе с Python очень часто возникает потребность в создании словаря из отдельных списков ключей и значений. Возьмем для примера два списка: один со списком стран, а другой — с их столицами.
countries = ['Россия', 'США', 'Франция'] capitals = ['Москва', 'Вашингтон', 'Париж']
Задача — создать словарь, где страны будут ключами, а столицы — соответствующими значениями.
Для решения этой задачи в Python существует несколько подходов.
Использование функции zip()
Один из наиболее простых и эффективных способов — использование встроенной функции zip() , которая возвращает итератор кортежей, где первый элемент в каждом происходит из первого передаваемого аргумента, второй — из второго и так далее. Затем итератор можно преобразовать в словарь с помощью функции dict() .
countries = ['Россия', 'США', 'Франция'] capitals = ['Москва', 'Вашингтон', 'Париж'] dictionary = dict(zip(countries, capitals))
В результате получаем требуемый словарь:
Использование цикла for
Другой подход — использование цикла for . В этом случае сначала создается пустой словарь, а затем в цикле для каждого ключа из списка ключей в словарь добавляется соответствующее значение из списка значений.
countries = ['Россия', 'США', 'Франция'] capitals = ['Москва', 'Вашингтон', 'Париж'] dictionary = <> for i in range(len(countries)): dictionary[countries[i]] = capitals[i]
В результате также получаем требуемый словарь:
Выбор подхода зависит от конкретной задачи и предпочтений программиста. Оба метода позволяют быстро и просто решить поставленную задачу.
Пять способов создать словарь
Словарь — структура, которая позволяет хранить данные в формате ключ-значение. Словари удобны для того, чтобы передавать информацию внутри программы, они быстрые, легко конвертируются в формат JSON, который используется в http-запросах, и поэтому являются одним из главных инструментов разработчика.
Я знаю пять (!) способов создать словарь в Python. С помощью литералов словаря:
fish =
Используя конструктор явно:
snail = dict( eat=”leaves”, move=”ground”, say=None )
Или инициализируя его кортежами:
cow = dict([ (“move”, “ground”), (“eat”, “grass”), (“say, “moo”) ])
Четвертый, с помощью генераторных выражений (версия интерпретатора 3.5 и выше):
>>> animals = [“snail”, “fish”, “cow”] >>>
Этот трюк еще бывает полезен, если нужно поменять местами ключи и значения:
Только будьте осторожны, потому что ключи в словаре должны быть уникальны. Если какие-то значения исходного словаря совпадали, то, когда они станут ключами нового, дубликаты исчезнут.
И последний, который я использую, когда мне надо взять ключи из одного контейнера, а значения из другого:
>>> animals = [«frog», «snail», «bird»] >>> numbers = [1, 2, 3] >>> dict(zip(animals, numbers))
Почему так много? Потому что каждый удобен под свой случай.
Словари в Python и методы работы с ними

В одной из прошлых статей я разбирал списки в Python и методы работы с ними. Сегодня мы узнаем, как работать со словарями в Python и изучим их методы.
Что такое словарь
Словари (dict) хранят в себе ключи и их объекты, где ключ – это имя объекта в словаре. Их могут называть ассоциативными массивами или хеш-таблицами.
Как мы знаем, в списках доступ к элементам осуществляется по индексу, который является неотрицательным числом. Индекс в списках создается автоматически при добавлении новых элементов, а индексами в словарях служат ключи, и их мы должны объявлять сами.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Для каких целей нам будут полезны словари?
- Подсчет каких-то предметов, где ключи – названия предметов, а объект – их количество.
- Для экономии памяти, если есть массив, который использует не все индексы по порядку.
- Установка соответствий между объектами, сортировка.
- Хранение данных разных объектов (например: ключ – ID пользователя ВКонтакте, а объект – массив с данными).
Ключом может быть произвольный неизменяемый тип данных: различные числа, строки, кортежи. Ключом в словаре не может быть множество, но может быть неизменяемый элемент типа frozenset. Значением элемента словаря может быть любой изменяемый или неизменяемый тип данных.
Создание словаря в Python
Пустой словарь в Python, как и в JavaScript, можно создать двумя способами: через функцию dict() или с помощью фигурных скобок. Рассмотрим на примере:
#Создание через функцию: dict1 = dict() #Создание через фигурные скобки: dict2 = <> print(type(dict1)) #Выведет print(type(dict2)) #Выведет print(dict1) #Выведет <> print(dict2) #Выведет <>
Теперь создадим уже заполненный словарь через функцию и фигурные скобки:
#Создание через функцию: dict1 = dict(car=’машина’, apple=’яблоко’) #Создание через фигурные скобки: dict2 = < 'car': 'машина', 'apple': 'яблоко' >print(dict1) #Выведет print(dict2) #Выведет
Изменение словаря
Добавим в наш словарь объект. Для этого нам нужно придумать значение ключу. Рассмотрим на примере:
dict = < 'car': ‘машина’, 'apple': 'яблоко' >dict[‘orange’] = ‘апельсин’ #В квадратных скобках указываем имя ключа, а значение после знака равно print(dict) #Выведет
Для удаления ключа и его объекта в словаре используют метод del, указывая имя ключа в квадратных скобках:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >del dict[‘orange’] print(dict) #Выведет
Перебор элементов словарей в Python
Для вывода всех ключей и значений по порядку используем цикл с оператором in:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >for key in dict: print(key, dict[key]) #Выведет: #car машина #apple яблоко #orange апельсин
Для вывода значения по ключу используем имя словаря и квадратные скобки с именем нужного ключа:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >print(dict['car']) #Выведет 'машина'
Методы словарей в Python
copy() – создание копии словаря. Рассмотрим на примере:
dict1 = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >dict2 = dict1.copy() print(dict2) #Выведет
get() – получение значения по ключу. Рассмотрим на примере:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >print(dict.get('car')) #Выведет 'машина'
clear() – очистка словаря. Рассмотрим на примере:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >dict.clear() print(dict) #Выведет <>
keys() – получение всех ключей словаря. Рассмотрим на примере:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >print(dict.keys()) #Выведет dict_keys(['car', 'apple', 'orange'])
values() – получение всех значений элементов словаря. Пример:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >print(dict.values()) #Выведет dict_values(['машина', 'яблоко', 'апельсин'])
items() – получение всех элементов словаря, включая ключи. Рассмотрим на примере:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >print(dict.items()) #Выведет dict_items([('car', 'машина'), ('apple', 'яблоко'), ('orange', 'апельсин')])
pop() – удаляет и возвращает значение ключа. Рассмотрим на примере:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >print(dict.pop(‘car’)) #Выведет ‘машина’ print(dict) #Выведет
popitem() – удаляет и возвращает имя и значение ключа. Пример:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >print(dict.pop()) #Выведет (‘orange’, ‘апельсин’) print(dict) #Выведет
setdefault() – получение значения по ключу, если такой ключ присутствует в словаре. Когда такого ключа нет, он создается со значением None (если оно не указано в свойствах). Рассмотрим на примере:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >print(dict.setdefault(‘car’) #Выведет ‘машина’ print(dict.setdefault(‘home’, ‘дом’) #Выведет ‘дом’ print(dict) #Выведет
update(<>) – обновить значения по ключам, добавление новых ключей:
dict = < 'car': 'машина', 'apple': 'яблоко', 'orange': 'апельсин' >dict.update() print(dict) #Выведет
Итог
Мы изучили словари в Python и методы работы с ними. Надеюсь, статья была полезной для вас. Удачи!