Ответ 1
Разница в том, что второй метод не работает:
>>> {}.update(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: update expected at most 1 arguments, got 2
dict.update()
ожидает найти итерацию пар ключ-значение, аргументы ключевого слова или другой словарь:
Обновите словарь с помощью пар ключ/значение из другого, перезаписывая существующие ключи. Верните
None
.
update()
принимает либо другой объект словаря, либо итерабельность пар ключ/значение (в виде кортежей или других итераций длины два). Если указаны аргументы ключевого слова, словарь затем обновляется этими парами ключ/значение:d.update(red=1, blue=2)
.
map()
- это встроенный метод, который создает последовательность, применяя элементы второго (и последующих) аргументов к первому аргументу, который должен быть вызываемым. Если ваш объект key
не является вызываемым, а объект value
является последовательностью, ваш первый метод также не работает.
Демонстрация рабочего приложения map()
:
>>> def key(v):
... return (v, v)
...
>>> value = range(3)
>>> map(key, value)
[(0, 0), (1, 1), (2, 2)]
>>> product = {}
>>> product.update(map(key, value))
>>> product
{0: 0, 1: 1, 2: 2}
Здесь map()
просто генерирует пары ключ-значение, которые удовлетворяют ожиданиям dict.update()
.