Не понимаю как добавить множество значений для ключа

есть вот такое условие задачи:

Напишите функцию update_dictionary(d, key, value), которая принимает на вход словарь d и два числа: key и value.

— Если ключ key есть в словаре d, то добавьте значение value в список, который хранится по этому ключу.

— Если ключа key нет в словаре, то нужно добавить значение в список по ключу 2 * key. Если и ключа 2 * key нет, то нужно добавить ключ 2 * key в словарь и сопоставить ему список из переданного элемента [value].

Я написал вот такой код:

d = {}
def update_dictionary(d, key, value):
    if key in d:
        d[key] = [value]
    elif key * 2 in d:
        d[key * 2] = [value]
    elif key not in d:
        d[key * 2] = [value]

На выходе должно получаться вот это:

print(update_dictionary(d, 1, -1))  # None
print(d)                            # {2: [-1]}
update_dictionary(d, 2, -2)
print(d)                            # {2: [-1, -2]}
update_dictionary(d, 1, -3)
print(d)                            # {2: [-1, -2, -3]}

А получается вот это

print(update_dictionary(d, 1, -1))  # None
print(d)                            # {2: [-1]}
update_dictionary(d, 2, -2)
print(d)                            # {2: [-2]}
update_dictionary(d, 1, -3)
print(d)                            # {2: [-3]}

Я использовал добавление значений в список, но это не помогло (список обнулялся), также использовал метод setdefault, update - также ни к чему не привело.

Крайне благодарен за любую помощь. Спасибо!


Ответы (2 шт):

Автор решения: Сергей Шашко
d = {}
def update_dictionary(d, key, value):
    if key in d:
        d[key] = d[key] + [value]
    elif key * 2 in d:
        d[key * 2] = d[key * 2] + [value]
    else:
        d[key * 2] = [value]

print(update_dictionary(d, 1, -1))  # None
print(d)                            # {2: [-1]}
update_dictionary(d, 2, -2)
print(d)                            # {2: [-1, -2]}
update_dictionary(d, 1, -3)
print(d)       

{2: [-1]}
{2: [-1, -2]}
{2: [-1, -2, -3]}
→ Ссылка
Автор решения: Andy Pavlov

Для обновления существующего списка нужно использовать list.append(). Вы каждый раз при выполнении условия создаете новый список с элементом value

Если опустить проверки элементов на типы, то можно такой вариант решения использовать:

def update_dictionary(d, key, value):
    if d.get(key):
        d[key].append(value)
    else:
        if d.get(2 * key):
            d[2 * key].append(value)
        else:
            d[2 * key] = [value, ]

d = {}            
print(update_dictionary(d, 1, -1))  # None
print(d)                            # {2: [-1]}
update_dictionary(d, 2, -2)
print(d)                            # {2: [-1, -2]}
update_dictionary(d, 1, -3)
print(d)                            # {2: [-1, -2, -3]}
 

Вывод:

None
{2: [-1]}
{2: [-1, -2]}
{2: [-1, -2, -3]}   
→ Ссылка