Update: примеры (PYTHON)

Работа с методом update для словарей в языке Python
Раздел: Словари, Модификация коллекций
update([other]): None

Описание метода update в Python

Метод update() применяется к словарям (тип dict) и предназначен для обновления содержимого исходного словаря элементами из других словарей или итерируемых объектов. Метод изменяет исходный словарь на месте и не возвращает новое значение (возвращает None). Использование метода характерно для слияния данных, когда требуется добавить или перезаписать записи.

Аргументы:

  • other (опционально) - словарь или итерируемый объект с парами ключ-значение. Может быть одним словарём, несколькими словарями (переданными через **kwargs) или итерируемым объектом, содержащим пары ключ-значение (например, список кортежей).

Возвращаемое значение:

Метод всегда возвращает None. Изменения происходят непосредственно в исходном словаре.

Простые примеры использования update

Обновление словаря другим словарём:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 20, 'c': 30}
dict1.update(dict2)
print(dict1)
{'a': 1, 'b': 20, 'c': 30}

Обновление с использованием нескольких аргументов:

dict1 = {'x': 10}
dict1.update(y=20, z=30)
print(dict1)
{'x': 10, 'y': 20, 'z': 30}

Обновление с итерируемым объектом:

dict1 = {'a': 1}
dict1.update([('b', 2), ('c', 3)])
print(dict1)
{'a': 1, 'b': 2, 'c': 3}

Похожие методы в Python

Оператор | (Python 3.9+) - выполняет слияние словарей, возвращая новый словарь, не изменяя исходные. Подходит для создания объединённого словаря без побочных эффектов.

Оператор |= - оператор обновления, аналогичен update(), но может использоваться в выражениях. Изменяет левый словарь, добавляя элементы правого.

Конструктор dict() с ** - создание нового словаря через распаковку нескольких словарей. Полезно при необходимости объединить данные без изменения оригиналов.

Типичные ошибки при работе с update

Передача неитерируемого объекта приводит к исключению TypeError.

d = {'a': 1}
d.update(123)
TypeError: 'int' object is not iterable

Использование неверного формата пар в итерируемом объекте вызывает ошибку.

d = {'a': 1}
d.update([('b', 2, 3)])
ValueError: dictionary update sequence element #0 has length 3; 2 is required

Ожидание возврата нового словаря - распространённая логическая ошибка, так как метод возвращает None.

d = {'a': 1}
result = d.update({'b': 2})
print(result)
None

Изменения в последних версиях Python

В Python 3.9 появились операторы | и |= для слияния и обновления словарей, что предоставило более интуитивные альтернативы методу update(). Сам метод update() не претерпел значительных изменений в своей базовой функциональности, но теперь может использоваться совместно с новыми операторами для более гибкой работы со словарями.

Расширенные примеры применения update

Обновление словаря с использованием генератора пар:

Пример python
base_dict = {'a': 1, 'b': 2}
new_pairs = ((chr(i), i) for i in range(97, 100))
base_dict.update(new_pairs)
print(base_dict)
{'a': 97, 'b': 98, 'c': 99}

Комбинирование нескольких источников данных:

Пример python
config = {'version': 1}
defaults = {'mode': 'production', 'debug': False}
user_settings = {'debug': True}
env_vars = {'port': 8080}
config.update(defaults)
config.update(user_settings)
config.update(env_vars)
print(config)
{'version': 1, 'mode': 'production', 'debug': True, 'port': 8080}

Использование с другими типами, поддерживающими итерацию по парам:

Пример python
from collections.abc import ItemsView
class CustomMapping:
    def items(self):
        return [('key1', 'value1'), ('key2', 'value2')]

d = {}
obj = CustomMapping()
d.update(obj.items())
print(d)
{'key1': 'value1', 'key2': 'value2'}

Аналоги в других языках программирования

JavaScript: Object.assign() или spread оператор {...obj1, ...obj2}.

let obj1 = {a: 1, b: 2};
let obj2 = {b: 3, c: 4};
Object.assign(obj1, obj2);
console.log(obj1);
{a: 1, b: 3, c: 4}

PHP: array_merge() объединяет массивы, перезаписывая значения с одинаковыми строковыми ключами.

$array1 = ['a' => 1, 'b' => 2];
$array2 = ['b' => 3, 'c' => 4];
$result = array_merge($array1, $array2);
print_r($result);
Array ( [a] => 1 [b] => 3 [c] => 4 )

Java: putAll() у Map добавляет все пары из другой карты, заменяя значения по существующим ключам.

Map map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
Map map2 = new HashMap<>();
map2.put("b", 20);
map2.put("c", 30);
map1.putAll(map2);
System.out.println(map1);
{a=1, b=20, c=30}

питон update function comments

En
Update Update dict with another