Добавление элементов в словарь Python
Четыре способа добавить элементы в словарь Python: скобочная нотация, update(), setdefault() и оператор слияния Python 3.9+. Примеры и советы.
Словари Python — это изменяемые, упорядоченные (начиная с Python 3.7) коллекции пар ключ-значение. Поскольку они изменяемы, новые записи можно добавлять в любой момент после создания. В этой главе рассматриваются все стандартные способы добавления элементов в словарь, включая операторы слияния Python 3.9+, с практическими рекомендациями о том, когда лучше использовать каждый из них.
Что такое словарь Python?
Словарь хранит данные в виде пар ключ-значение внутри фигурных скобок {}. Ключи должны быть уникальными и неизменяемыми (строки, числа или кортежи); значения могут быть любым объектом Python.
# A simple dictionary
person = {'name': 'Alice', 'age': 30, 'city': 'New York'}Ключи уникальны — если присвоить значение ключу, который уже существует, старое значение будет перезаписано, а не продублировано. Помните об этом поведении при изучении приведённых ниже методов.
Способы добавления элементов в словарь
Использование скобочной нотации
Самый простой способ добавить новую пару ключ-значение — прямое присваивание с помощью квадратных скобок:
Вывод:
{'name': 'John', 'age': 25, 'city': 'New York', 'gender': 'Male'}Если ключ уже существует, его значение будет заменено, а не добавлено:
my_dict = {'name': 'John', 'age': 25}
my_dict['age'] = 30 # overwrites 25
print(my_dict)
# {'name': 'John', 'age': 30}Используйте скобочное присваивание, когда добавляете или обновляете один ключ, имя которого известно заранее.
Использование метода update()
dict.update() объединяет одну или несколько пар ключ-значение со словарём за один вызов. Можно передать другой словарь, итерируемый объект из пар (key, value) или именованные аргументы.
Объединение со вторым словарём:
Вывод:
{'name': 'John', 'age': 25, 'city': 'New York', 'gender': 'Male', 'occupation': 'Software Engineer'}Использование именованных аргументов для добавления нескольких ключей сразу:
my_dict = {'name': 'John', 'age': 25}
my_dict.update(city='New York', gender='Male')
print(my_dict)
# {'name': 'John', 'age': 25, 'city': 'New York', 'gender': 'Male'}Как и скобочное присваивание, update() перезаписывает существующие ключи. Используйте его, когда нужно добавить или обновить несколько записей за раз.
Использование метода setdefault()
dict.setdefault(key, default) добавляет ключ только в том случае, если его ещё нет в словаре. Если ключ существует, метод возвращает текущее значение, не изменяя ничего.
Вывод:
{'name': 'John', 'age': 25, 'city': 'New York', 'gender': 'Male'}Когда ключ уже существует, setdefault() оставляет его без изменений и возвращает текущее значение:
my_dict = {'name': 'John', 'age': 25}
result = my_dict.setdefault('name', 'Alice')
print(result) # John — not overwritten
print(my_dict) # {'name': 'John', 'age': 25}setdefault() — правильный инструмент, когда нужно инициализировать ключ резервным значением, не рискуя случайно перезаписать уже имеющиеся данные. Распространённый шаблон — инициализация отсутствующего ключа пустым списком перед добавлением элементов:
groups = {}
for item in ['apple', 'banana', 'avocado']:
letter = item[0]
groups.setdefault(letter, []).append(item)
print(groups)
# {'a': ['apple', 'avocado'], 'b': ['banana']}Использование операторов слияния (Python 3.9+)
В Python 3.9 добавлены два оператора, предоставляющие лаконичный синтаксис для объединения словарей.
| — создание нового объединённого словаря (без изменения исходных):
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d3 = d1 | d2 # d1 and d2 are unchanged
print(d3)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}|= — обновление на месте (аналог update(), но короче):
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d1 |= d2 # d1 is modified
print(d1)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}При совпадении ключей побеждает правый операнд — тот же приоритет, что и у update(). Эти операторы требуют Python 3.9 или новее; для более широкой совместимости используйте update().
Использование dict.fromkeys() для предварительного заполнения словаря
dict.fromkeys(keys, default) — это метод класса, создающий совершенно новый словарь из итерируемого объекта ключей и необязательного значения по умолчанию. Он не добавляет элементы в существующий словарь.
# Create a dictionary with a shared default value
template = dict.fromkeys(['name', 'age', 'city'], 'Unknown')
print(template)
# {'name': 'Unknown', 'age': 'Unknown', 'city': 'Unknown'}
# You can then populate it with real values
template['name'] = 'Alice'
template['age'] = 28
print(template)
# {'name': 'Alice', 'age': 28, 'city': 'Unknown'}fromkeys() удобен для создания заготовки словаря, когда ключи известны заранее, а значения будут заполнены позже.
Выбор подходящего метода
| Цель | Метод |
|---|---|
| Добавить или перезаписать один ключ | dict[key] = value |
| Добавить или перезаписать несколько ключей | dict.update(...) или dict |= other (3.9+) |
| Добавить ключ только если он отсутствует | dict.setdefault(key, default) |
| Объединить два словаря в третий | new = a | b (3.9+) |
| Создать новый словарь из списка ключей | dict.fromkeys(keys, default) |
Связанные главы
- Словари Python — обзор создания словарей и синтаксиса
- Доступ к элементам — чтение значений по ключу,
get()и итерация - Изменение элементов — безопасное обновление существующих значений
- Удаление элементов —
pop(),popitem(),delиclear() - Методы словаря — полный справочник по встроенным методам словаря
- Перебор словарей — итерация по ключам, значениям и элементам