Создайте словарь о людях и их увлечениях, т.е. {имя1: [хобби1, хобби2, ...], имя2: [...]}

def create_dictionary(data: str) -> dict: 
    dct = {}
    for line in data:
        d = line.strip().split(":")
        if len(d) > 1:
            if d[0] in dct:
                dct[d[0]].append(d[1])
            else:
                dct[d[0]] = [d[1]]
    return dct

sample_data = """Jack:crafting\nPeter:hiking\nWendy:gaming\nMonica:tennis\nChris:origami\nSophie:sport\nMonica:design\nCarmen:sport\nChris:sport\nMonica:skateboarding\nCarmen:cooking\nWendy:photography\nMonica:tennis\nCooper:yoga\nWendy:sport\nCooper:movies\nMonica:theatre\nCooper:yoga\nChris:gaming\nMolly:fishing\nJack:skateboarding\nWendy:fishing\nJack:drawing\nMonica:baking\nSophie:baking\nAlfred:driving\nAlfred:shopping\nAlfred:crafting\nJack:drawing\nCarmen:shopping\nCarmen:driving\nPeter:drawing\nCarmen:shopping\nWendy:fitness\nAlfred:travel\nJack:origami\nSophie:design\nJack:pets\nCarmen:dance\nAlfred:baking\nSophie:sport\nPeter:gaming\nJack:skateboarding\nCooper:football\nAlfred:sport\nCooper:fitness\nChris:yoga\nWendy:football\nMolly:design\nJack:hiking\nMonica:pets\nCarmen:photography\nJack:baking\nPeter:driving\nChris:driving\nCarmen:driving\nPeter:theatre\nMolly:hiking\nWendy:puzzles\nJack:crafting\nPeter:photography\nCarmen:theatre\nSophie:crafting\nCarmen:cooking\nAlfred:gaming\nPeter:theatre\nCooper:hiking\nChris:football\nChris:pets\nJack:football\nMonica:skateboarding\nChris:driving\nCarmen:pets\nCooper:gaming\nChris:hiking\nJack:cooking\nPeter:fishing\nJack:gaming\nPeter:origami\nCarmen:movies\nSophie:driving\nJack:sport\nCarmen:theatre\nWendy:shopping\nCarmen:pets\nWendy:gaming\nSophie:football\nWendy:theatre\nCarmen:football\nMolly:theatre\nPeter:theatre\nMonica:flowers\nMolly:skateboarding\nPeter:driving\nSophie:travel\nMonica:photography\nCooper:cooking\nJack:fitness\nPeter:cooking\nChris:gaming"""

dic = create_dictionary(sample_data)

print("shopping" in dic["Wendy"])  # -> True
print("fitness" in dic["Sophie"])  # -> False
print("gaming" in dic["Peter"])  # -> True
print(len(dic["Jack"]))  # ->  12
print(len(dic["Carmen"]))  # -> 10
print(len(dic["Molly"]))  # -> 5
print(len(dic["Sophie"]))  # -> 7

что-то явно делаю не так. Можете помочь? Не должно быть повторяющихся увлечений на 1 человеке.

 :param data: заданная строка из базы данных
 :return: словарь, где ключами являются люди, а значениями являются списки увлечений

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

Автор решения: CrazyElf
for line in data:

А почему вы думаете, что строка автоматически разобьётся и проитерируется по переводам строки? Так будет только если data - это файл. А строку вы должны сами разбить по переводам строки:

for line in data.split('\n'):
                ^^^^^^^^^^^^
→ Ссылка
Автор решения: Zhihar
def create_dictionary(data: str) -> dict:
    dct = {}
    for line in data.split('\n'):
        d = list(map(str.strip, line.split(":")))
        if len(d) > 1:
            dct[d[0]] = dct.get(d[0], []) + [d[1]]
    return dct

dic = create_dictionary(sample_data)

print("shopping" in dic["Wendy"])  # -> True
print("fitness" in dic["Sophie"])  # -> False
print("gaming" in dic["Peter"])  # -> True
print(len(set(dic["Jack"])))  # ->  12
print(len(set(dic["Carmen"])))  # -> 10
print(len(set(dic["Molly"])))  # -> 5
print(len(set(dic["Sophie"])))  # -> 7

ваши ошибки

  1. вы не разбиваете строку на строки по разделителю '\n' в самом начале:

     for line in data.split('\n'):
    
  2. от вас требуется найти уникальные значения, а вы выдаете полное кол-во

     print(len(set(dic["Jack"])))  # ->  12
    
  3. чисто для удобства - заполнение списка можно сделать и в одну строку через метод get, а не в 4 как у вас:

     dct[d[0]] = dct.get(d[0], []) + [d[1]]
    

Если же сразу писать в множество, а не в список, то код можно сделать таким:

    if len(d) > 1:
        dct[d[0]] = set.union(dct.get(d[0], set())).union([d[1]])
  1. ну и strip() можно применить не к начальной строке, а к строкам, которые получаются из нее - это понадежнее

     d = list(map(str.strip, line.split(":")))
    
→ Ссылка