Методы словаря в Python 3 с примерами
Методы словаря Python позволяют читать, добавлять, удалять и копировать пары ключ-значение без лишних циклов и проверок. Ниже разобраны все методы типа dict: clear(), copy(), fromkeys(), get(), items(), keys(), pop(), popitem(), setdefault(), update() и values(). Для каждого показан синтаксис, что он возвращает и в каких случаях вызывает ошибку.

Содержание статьи
- Python Dictionary clear()
- Python Dictionary copy()
- Python Dictionary fromkeys()
- Python Dictionary get()
- Python Dictionary items()
- Python Dictionary keys()
- Python Dictionary pop()
- Python Dictionary popitem()
- Python Dictionary setdefault()
- Python Dictionary update()
- Python Dictionary values()
Очистка словаря Python
Метод clear() призван удалять все данные из словаря Python. Данный метод имеет достаточно простую логику работы.
- Не принимает никаких параметров
- Кроме значения
None, больше ничего не возвращает
Применение метода clear()
d = {1: "one", 2: "two"}
d.clear()
print('d =', d)
#Результатd = {}
Копирование словаря Python
Для копирования словаря, так же как и в методах списка, есть отличный метод copy().
original_marks = {'Physics':67, 'Maths':87}
copied_marks = original_marks.copy()
print('Оригинальный словарь:', original_marks)
print('Скопированный:', copied_marks)
# Результат: Оригинальный словарь: {'Physics': 67, 'Maths': 87}
# Скопированный словарь: {'Physics': 67, 'Maths': 87}
Синтаксис метода copy() работает практически одинаково как со словарем, так и со списком.
dict.copy()
- Метод
copy()- не принимает никаких аргументов - Метод
copy()- возвращает копию из словаря, при этом оригинальный словарь остается неизменным
Пример 1. Как скопировать словарь?
original = {1:'one', 2:'two'}
new = original.copy()
print('Оригинал: ', original)
print('Новый: ', new)
В статье про методы списков python мы уже писали про метод copy() и знак"=". Возможно у вас возникнет вопрос, в чем разница копирования между методом copy() и оператором присваивания "=".
- Оператор присваивания
"="- создает новую ссылку, которая полностью ссылается на оригинал, в случае если оригинал будет изменен, копия так же изменится. - Метод
copy()- создает полностью новый словарь, и копирует туда все элементы с оригинала, у нас появляется полностью идентичный оригиналу словарь, который не реагирует на изменение в оригинальном словаре
Пример 2. Оператор "=" для копирования
original = {1:'one', 2:'two'}
new = original
# Очистим элементы из нового словаря
new.clear()
print('Новый: ', new)
print('Оригинал: ', original)
#Результатnew: {}
original: {}
Как видите, в данном случае мы очистили словарь new, и вместе с ним был очищен и original словарь.
Пример 3. Метод copy() для копирования словарей
original = {1:'one', 2:'two'}
new = original.copy()
# Очищаем словарь
new.clear()
print('new: ', new)
print('original: ', original)
#Результатnew: {}
original: {1: 'one', 2: 'two'}
На данном примере мы видим, что даже при очистке словаря new, оригинальный словарь original остался неизменным.
Dict fromkeys
Метод fromkeys() - предназначен для генерации нового словаря. Новый словарь генерируется из заданной последовательности элементов, и значениями предоставленными пользователем.
Синтаксис метода fromkeys():
dictionary.fromkeys(sequence[, value])
Метод fromkeys() принимает два параметра:
sequence- последовательность элементов, которые будут представлять собой ключи для словаряvalue- необязательное значение, которое устанавливается для каждого элемента словаря
Метод fromkeys() возвращает новый сгенерированный словарь, где ключами являются заранее заданные последовательности элементов.
Если данному методу передается аргумент value, то каждому элементу присваивается так и значение указанное в параметре value.
Пример 1. Создаем словарь из последовательных элементов
{'a': None, 'u': None, 'o': None, 'e': None, 'i': None}
Пример 2. Создаем словарь с ключом и со значением
# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }
value = 'vowel'
vowels = dict.fromkeys(keys, value)
print(vowels)
#Результат{'a': 'vowel', 'u': 'vowel', 'o': 'vowel', 'e': 'vowel', 'i': 'vowel'}
Пример 3. Создаем словарь из списка
keys = {'a', 'e', 'i', 'o', 'u' }
value = [1]
vowels = dict.fromkeys(keys, value)
print(vowels)
# Обновляем значение
value.append(2)
print(vowels)
#Результат{'a': [1], 'u': [1], 'o': [1], 'e': [1], 'i': [1]}
{'a': [1, 2], 'u': [1, 2], 'o': [1, 2], 'e': [1, 2], 'i': [1, 2]}
Python dict get
Метод словаря get(), вернет значение ключа, если искомый ключ находится в словаре.
marks = {'Physics':67, 'Maths':87}
print(marks.get('Physics'))
# Результат: 67
Синтаксис метода get() имеет следующий вид:
dict.get(key[, value])
Параметры метода get()
key- Ключ для поискаvalue- необязательный параметр, значение которое должно быть возвращено. Значение по умолчанию равно None.
Параметры возврата метода get()
- Значение
key, если он находится в словаре None- если key не найден в словареValue- если ключ найден в словаре
Пример 1. Пример использование метода get()
person = {'name': 'Phill', 'age': 22}
print('Name: ', person.get('name'))
print('Age: ', person.get('age'))
# value is not provided
print('Salary: ', person.get('salary'))
# value is provided
print('Salary: ', person.get('salary', 0.0))
#РезультатName: Phill
Age: 22
Salary: None
Salary: 0.0
В чем различие между методом get() и dict[ключ]?
Метод get()- Вернет значение None если искомый ключ не найден в словареdict[ключ]- Вызовет исключениеKeyError, если искомый ключ не обнаружен в словаре
person = {}
# Используем метод get()
print('Salary: ', person.get('salary'))
# Используем dict[ключ]
print(person['salary'])
#Результат
Salary: None
Traceback (most recent call last):
File "", line 7, in
print(person['salary'])
KeyError: 'salary'
Python dict items
Метод словаря items() - предназначен для формирования списка пар кортежей словаря(ключ,значение).
marks = {'Physics':67, 'Maths':87}
print(marks.items())
# Результат: dict_items([('Physics', 67), ('Maths', 87)])
Синтаксис метода items()
dictionary.items()
Параметры метода items()
- Метод
items()- не принимает никаких параметров
Пример 1. Получаем все элементы словаря с помощью items()
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
print(sales.items())
#Результат
dict_items([('apple', 2), ('orange', 3), ('grapes', 4)])
Пример 2. Как работает метод items() если меняет словарь?
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
items = sales.items()
print('Оригинальный словарь:', items)
# Удаляем один элемент
del[sales['apple']]
print('Обновленный словарь:', items)
#Оригинальный словарь: dict_items([('apple', 2), ('orange', 3), ('grapes', 4)])
Обновленный словарь: dict_items([('orange', 3), ('grapes
Как мы видим, если происходит какое-то обновление, изменения отражаются со внесенными изменениями.
Python dict keys
Метод словаря keys() - возвращает объект содержащий список всех ключей словаря.
Параметры метода keys()
Метод keys() не принимает никаких параметров
Возвращаемые значения
Метод keys() - возвращает список всех ключей содержащихся в словаре. В случае если происходит изменение списка, эти изменения также отражаются в получаемом списке ключей.
Пример 1. Как работает метод keys()?
person = {'name': 'Phill', 'age': 22, 'salary': 3500.0}
print(person.keys())
empty_dict = {}
print(empty_dict.keys())
#Результатdict_keys(['name', 'salary', 'age'])
dict_keys([])
Пример 2. Как работает keys() при обновлении словаря?
person = {'name': 'Phill', 'age': 22, }
print('Перед обновлением')
keys = person.keys()
print(keys)
# Обновление
person.update({'salary': 3500.0})
print('\nПосле обновления')
print(keys)
Как мы видим, при обновлении словаря, мы получаем автоматически обновленный список ключей словаря.
Python dict pop
Метод pop() словаря работает аналогично методу pop() списка. Данный метод удаляет, и затем возвращает значение элемента имеющего заданный ключ.
marks = { 'Physics': 67, 'Chemistry': 72, 'Math': 89 }
element = marks.pop('Chemistry')
print(element)
# Результат: 72
Синтаксис метода pop()
dictionary.pop(key[, default])
Параметры метода pop()
Метод словаря pop() принимает два параметра:
key- ключ, который необходимо найти для удаленияdefault- значение которое надо вернуть, если искомый ключ не найден в словаре
Возвращаемое значение метода pop()
Метод словаря pop() возвращает следующие параметры:
- Если
keyнайден, возвращается значение удаленного элемента - Если
keyне найден, возвращается значение указанное по умолчанию, обычноNone - Если
keyне найден, и при этом не указан аргумент по умолчанию, появится исключительная ошибкаKeyError.
Пример 1. Выбор элемента из словаря
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
element = sales.pop('apple')
print('Возвращаемый элемент:', element)
print('Обновленный словарь:', sales)
#РезультатВозвращаемый элемент: 2
Обновленный словарь: {'orange': 3, 'grapes': 4}
Пример 2. Выбор несуществующего элемента
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
element = sales.pop('guava')
#Результат
KeyError: 'guava'
В данном случае, мы указали несуществующий ключ, и при этом не указали значение по умолчанию, соответственно была вызвана ошибка KeyError.
Пример 3. Несуществующий элемент, с указанным значением по умолчанию
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
element = sales.pop('guava', 'banana')
print('Удаляемый элемент:', element)
print(sales)
Python dict popitem
Метод popitem() чем то схож с методом pop(). Данный метод удаляет и возвращает последнее значение словаря(ключ и значение).
Синтаксис метода popitem()
dict.popitem()
Принимаемые параметры
Метод словаря popitem(), не принимает никаких параметров.
Возвращаемые значения метода popitem()
popitem()- удаляет и возвращает последнюю пару (ключ, значение) из словаря
Пример. Как работает метод popitem()?
person = {'name': 'Phill', 'age': 22, 'salary': 3500.0}
result = person.popitem()
print('Возвращаемое значение = ', result)
print('Измененный словарь = ', person)
# Добавляем новую пару
person['profession'] = 'Plumber'
# Сейчас новая пара является последним элементом
result = person.popitem()
print('Возвращаемое значение = ', result)
print('Измененный словарь = ', person)
#Результат
Return Value = ('salary', 3500.0)
person = {'name': 'Phill', 'age': 22}
Return Value = ('profession', 'Plumber')
person = {'name': 'Phill', 'age': 22}
Небольшое уточнение, если словарь будет пустым, то появится исключительная ошибка KeyError.
Python dict setdefault
Метод setdefault() - возвращает значение ключа в том случае, если искомый ключ находится в словаре. Если нет искомого ключа, он вставляет пару ключ/значение в словарь.
Синтаксис метода setdefault()
dict.setdefault(key[, default_value])
Параметры метода setdefault()
Метод словаря setdefault() принимает два значения:
Key- ключ для поиска в словареdefault_value- необязательный параметр, если нет искомого ключа, ключ с указанным значением будет вставлен в словарь. Если значение пустое, передается значениеNone
Возвращаемые значения метода setdefault()
- Значение параметра
key, если он присутствует в словаре None- если искомый ключ отсутствует в словаре, и не указано значение по умолчаниюdefault_value- если искомый ключ не найден, и указано значение по умолчанию
Пример 1. Когда ключ находится в словаре
person = {'name': 'Phill', 'age': 22}
age = person.setdefault('age')
print('person = ',person)
print('Age = ',age)
#Результат
person = {'name': 'Phill', 'age': 22}
Age = 22
Пример 2. Когда ключ отсутствует в словаре
person = {'name': 'Phill'}
# Ключ отсутствует в словаре
salary = person.setdefault('salary')
print('person = ',person)
print('salary = ',salary)
# Ключ не найден в словаре
# Указано значение по умолчанию
age = person.setdefault('age', 22)
print('person = ',person)
print('age = ',age)
#Результат
person = {'name': 'Phill', 'salary': None}
salary = None
person = {'name': 'Phill', 'age': 22, 'salary': None}
age = 22
Dict update
Метод словаря update() - обновляет словарь другими элементами, например из другого словаря.
marks = {'Physics':67, 'Maths':87}
internal_marks = {'Practical':48}
marks.update(internal_marks)
print(marks)
# Результат: {'Physics': 67, 'Maths': 87, 'Practical': 48}
Синтаксис метода update()
dict.update([other])
Параметры метода update()
- Принимает в качестве аргумента словарь/кортеж
- Если метод
update()вызван без аргументов, то в таком случае словарь останется неизменным
Возвращаемые значения
Метод словаря update() обновляет данные словаря элементами из других объектов. Данный метод не возвращает ничего (None).
Пример 1. Как работает метод update()?
d = {1: "one", 2: "three"}
d1 = {2: "two"}
# Обновляет значение ключа 2
d.update(d1)
print(d)
d1 = {3: "three"}
# Добавляет элемент с ключом 3
d.update(d1)
print(d)
#Результат
{1: 'one', 2: 'two'}
{1: 'one', 2: 'two', 3: 'three'}
Пример 2. Метод update() при передаче кортежа
d = {'x': 2}
d.update(y = 3, z = 0)
print(d)
#Результат{'x': 2, 'y': 3, 'z': 0}
Python dict values
Метод словаря values() возвращает список всех значений словаря.
Синтаксис метода словаря values()
dict.values()
Параметры метода values()
Метод словаря values() не принимает никаких параметров.
Возвращаемые значение метода values()
Метод словаря values() вернет нам объект, содержащий список всех значений словаря.
Пример 1. Получаем значения словаря
# random sales dictionary
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
print(sales.values())
#Результатdict_values([2, 4, 3])
Пример 2. Как работает метод values() при изменении словаря?
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
values = sales.values()
print('Original items:', values)
# Удаляем элемент из словаря
del[sales['apple']]
print('Updated items:', values)
#Результат
Original items: dict_values([2, 4, 3])
Updated items: dict_values([4, 3])
- Метод
values()возвращает список всех значений словаря - Если список обновляется, то обновления отражаются в возвращаемых значениях
Сводная таблица методов dict
Таблица помогает быстро выбрать нужный метод. В колонке "Меняет словарь" отмечено, изменяет ли вызов исходный объект или только возвращает данные.
| Метод | Что возвращает | Меняет словарь |
|---|---|---|
clear() | None | да, удаляет все пары |
copy() | поверхностную копию | нет |
dict.fromkeys(keys, value) | новый словарь | нет |
get(key, default) | значение или default | нет |
items(), keys(), values() | объект-представление | нет |
pop(key, default) | значение удаленного ключа | да |
popitem() | последнюю пару (ключ, значение) | да |
setdefault(key, default) | значение ключа | да, если ключа не было |
update(other) | None | да |
Начиная с Python 3.7 словари хранят порядок добавления ключей, поэтому popitem() всегда удаляет последнюю добавленную пару, а keys() и items() выдают элементы в том же порядке. Подробнее о самом типе и способах его создания написано в статье словари в Python.
Операторы | и |= для объединения словарей
В Python 3.9 у словарей появились операторы объединения. Оператор | создает новый словарь, а |= обновляет левый словарь на месте и по действию совпадает с update(). При совпадении ключей побеждает значение из правого операнда.
base = {"host": "localhost", "port": 8000}
local = {"port": 5000, "debug": True}
config = base | local
print(config) # {'host': 'localhost', 'port': 5000, 'debug': True}
print(base) # {'host': 'localhost', 'port': 8000} - не изменился
base |= local
print(base) # {'host': 'localhost', 'port': 5000, 'debug': True}Для версий до 3.9 тот же результат дает распаковка {**base, **local}. Если нужно упорядочить результат по ключам или значениям, пригодится разбор сортировки словаря.
Частые вопросы
Короткие ответы на вопросы, которые чаще всего возникают при работе с методами словаря.
Чем get() отличается от обращения по ключу d[key]?
Запись d[key] вызывает KeyError, если ключа нет. Метод get() в этом случае возвращает None или значение из второго аргумента, поэтому подходит для необязательных полей, например при разборе JSON.
Как удалить ключ из словаря без ошибки, если его нет?
Вызовите pop() со значением по умолчанию: d.pop("key", None). Оператор del d["key"] при отсутствии ключа выбросит KeyError.
Почему изменение копии меняет исходный словарь?
copy() делает поверхностную копию: вложенные списки и словари остаются общими. Для полной независимой копии используйте copy.deepcopy() из модуля copy.
Можно ли менять словарь во время перебора items()?
Менять значения существующих ключей можно, а добавление или удаление ключей во время перебора вызовет RuntimeError: dictionary changed size during iteration. Перебирайте копию: for k, v in list(d.items()):.
Когда использовать setdefault(), а когда defaultdict?
setdefault() удобен для разовой вставки значения по умолчанию. Если словарь постоянно группирует данные по ключам, проще взять collections.defaultdict, который создает значение автоматически.