W3docs

Добавление элементов в словарь 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'}

Ключи уникальны — если присвоить значение ключу, который уже существует, старое значение будет перезаписано, а не продублировано. Помните об этом поведении при изучении приведённых ниже методов.

Способы добавления элементов в словарь

Использование скобочной нотации

Самый простой способ добавить новую пару ключ-значение — прямое присваивание с помощью квадратных скобок:

python— editable, runs on the server

Вывод:

{'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) или именованные аргументы.

Объединение со вторым словарём:

python— editable, runs on the server

Вывод:

{'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) добавляет ключ только в том случае, если его ещё нет в словаре. Если ключ существует, метод возвращает текущее значение, не изменяя ничего.

python— editable, runs on the server

Вывод:

{'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)

Связанные главы

Практика

Практика
Which of the following are valid ways to add a new key-value pair to an existing Python dictionary?
Which of the following are valid ways to add a new key-value pair to an existing Python dictionary?
Was this page helpful?