Как добавить значение к уже существующему значению в словаре 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 шт):
Вот так может вам будет гораздо понятнее и проще не запутаться. Этот код работает:
for val, *key in pets:
key = tuple(key)
if key not in result:
result[key] = [val]
else:
result[key].append(val)
from collections import defaultdict
result = defaultdict(list)
for pet, *owner in pets:
result[tuple(owner)].append(pet)
Не нужно проверять наличие ключа в словаре. При присваивании словарь сам это делает автоматически.
defaultdict автоматически создает новый ключ и пустой список для него, если ключа еще нет, при этом в список сразу можно добавлять значения.