Как добавить значение к уже существующему значению в словаре Python

pets = [('Hatiko', 'Parker', 'Wilson', 50),
        ('Rusty', 'Josh', 'King', 25),
        ('Fido', 'John', 'Smith', 28),
        ('Butch', 'Jake', 'Smirnoff', 18),
        ('Odi', 'Emma', 'Wright', 18),
        ('Balto', 'Josh', 'King', 25),
        ('Barry', 'Josh', 'King', 25),
        ('Snape', 'Hannah', 'Taylor', 40),
        ('Horry', 'Martha', 'Robinson', 73),
        ('Giro', 'Alex', 'Martinez', 65),
        ('Zooma', 'Simon', 'Nevel', 32),
        ('Lassie', 'Josh', 'King', 25),
        ('Chase', 'Martha', 'Robinson', 73),
        ('Ace', 'Martha', 'Williams', 38),
        ('Rocky', 'Simon', 'Nevel', 32)]


result = {}

for tup in pets:
    if tup not in result:
        result[tup[1], tup[2], tup[3]] = [tup[0]]
    else:
        result[tup[1], tup[2], tup[3]].append(tup[0])

print(result)

задача в том, чтобы он взял имя фамилию и возраст хозяина и сделал их ключом словаря, это работает, tup[0], т.е кличку собаки он делает значением словаря, однако строка

else:
        result[tup[1], tup[2], tup[3]].append(tup[0])

не добавляет ещё одно значение к ключу словаря, почему?

В примере у Josh King 25 есть несколько собак, но он сохраняет только последнюю - Lassie, как это исправить и добавить всех собак?

Попытался сделать через append, так как значение - список, и в него через append можно добавить новые значения, но он их не добавляет


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

Автор решения: CrazyElf

Вот так может вам будет гораздо понятнее и проще не запутаться. Этот код работает:

for val, *key in pets:
    key = tuple(key)
    if key not in result:
        result[key] = [val]
    else:
        result[key].append(val)
→ Ссылка
Автор решения: Vladimir Bogdanov
from collections import defaultdict

result = defaultdict(list)

for pet, *owner in pets:
    result[tuple(owner)].append(pet)

Не нужно проверять наличие ключа в словаре. При присваивании словарь сам это делает автоматически.

defaultdict автоматически создает новый ключ и пустой список для него, если ключа еще нет, при этом в список сразу можно добавлять значения.

→ Ссылка