Форум сайта python.su
Такая проблема мне нужно было сделать:
Вам доступен список pets, содержащий информацию о собаках и их владельцах. Каждый элемент списка – это кортеж вида (кличка собаки, имя владельца, фамилия владельца, возраст владельца).
Дополните приведенный код так, чтобы в переменной result хранился словарь, в котором для каждого владельца будут перечислены его собаки. Ключом словаря должен быть кортеж (имя, фамилия, возраст владельца), а значением – список кличек собак (сохранив исходный порядок следования).
Примечание 1. Не забывайте: кортежи являются неизменямыми, поэтому могут быть ключами словаря.
Примечание 2. Обратите внимание, что у некоторых владельцев по несколько собак.
Но я не понимаю как значение ключа которая являеться строкой переделать в список, если запустить мой код увидите что у меня все значения ключа являються строкой
Вот мой код:
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 i in pets: result.update({i[1:]:i[0]}) for j in pets: for k,v in result.items(): if k == j[1:] and j[0] != v: result.update({k:v + ' ' + j[0]}) print(result)
Отредактировано Meacronacer (Авг. 7, 2021 23:18:01)
Офлайн
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 i in pets: if i[1:] in result: # если кортеж есть в словаре result[i[1:]].append(i[0])# добавляем к списку значений else:# иначе result[i[1:]] = [i[0]]# добавляем ключ,список значений print(result)
Отредактировано xam1816 (Авг. 7, 2021 23:33:59)
Офлайн
Meacronacer
Как изменить значение ключа из строки в список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 i in pets: result.update({i[1:]:i[0]}) for j in pets: for k,v in result.items(): if k == j[1:] and j[0] != v: result.update({k:v + ' ' + j[0]}) print(result)
>>> 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 i in pets: ... result.update({i[1:]:[]}) ... >>> for j in pets: ... for k,v in result.items(): ... if k == j[1:] and j[0] != v: ... result.update({k:v + [j[0]]}) ... >>> print(result) {('Parker', 'Wilson', 50): ['Hatiko'], ('Josh', 'King', 25): ['Rusty', 'Balto', 'Barry', 'Lassie'], ('John', 'Smith', 28): ['Fido'], ('Jake', 'Smirnoff', 18): ['Butch'], ('Emma', 'Wright', 18): ['Odi'], ('Hannah', 'Taylor', 40): ['Snape'], ('Martha', 'Robinson', 73): ['Horry', 'Chase'], ('Alex', 'Martinez', 65): ['Giro'], ('Simon', 'Nevel', 32): ['Zooma', 'Rocky'], ('Martha', 'Williams', 38): ['Ace']} >>>
Отредактировано py.user.next (Авг. 8, 2021 00:50:33)
Офлайн