Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

В чем отличие работы методов get и setdefault в словарях?

Изучаю python, сейчас разбираюсь с коллекциями. Столкнулся с 2-мя методами в словарях  -> get() и setdefault(). По описанию, вроде бы они выполняют одну и туже задачу, но на практике не могу понять разницу в исполнении.
Почему этот код не работает:
def merge(values):  # values - это список словарей
    my_dict = {}
    for val in values:
        for key, value in val.items():
            my_dict[key] = my_dict.get(key, set()).add(value)
    return my_dict


print(merge([{'a': 1, 'b': 2}, {'b': 10, 'c': 100}, {'a': 1, 'b': 17, 'c': 50}, {'a': 5, 'd': 777}]))
А этот работает:
def merge(values):  # values - это список словарей
    my_dict = {}
    for val in values:
        for key, value in val.items():
            my_dict.setdefault(key, set()).add(value)
    return my_dict


print(merge([{'a': 1, 'b': 2}, {'b': 10, 'c': 100}, {'a': 1, 'b': 17, 'c': 50}, {'a': 5, 'd': 777}]))
По идее - оба метода возвращают значение ключа из словаря, и если ключа нет, то возвращают значение по умолчанию. Да, я понимаю, что setdefault() предварительно создает пару ключ-значение в словаря, а get() не создает, но тот же get() в коде выше должен вернуть пустое множество, в которое должно добавляться число, но в результате метод множеств add() почему-то не исполняется.
PythonМетоды словарей+1
Алексей Сбитнев
  ·   · 3,1 K
Простое лучше сложного. Сложное лучше запутанного...  · 1 мая 2023
В первом случаем Питон читет строку кода 
"my_dict[key] = my_dict.get(key, set()).add(value)" как "my_dict[key] = None", т.к. метод add ничего не возвращает поэтому его можно использовать только вне равенств. 
Вот более наглядный пример. Нельзя написать:
x = {1,2,3}
y = x.add(4)  #Питон прочитает код как "y = None"
print(y)  #None
правильно будет написать:
x = {1,2,3} 
x.add(4) 
y = x 
print(y)  #{1,2,3,4}
Отвечая конкретно на Ваш вопрос, т.к. в случае с setdefault знак "=" не требуется, то и метод add в этом случае работает корректно.
Программист на Python, инвестор, энтузиаст  · 21 февр 2023
В первом случае у вас в словарь по ключу key кладется результат функции add (то есть ничего или None) А во втором случае вы сначала добавляете в словарь множество, потом оно вам возвращается и вы добавляете в него элемент... Читать далее