Изучаю 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() почему-то не исполняется.