Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2019 17:36:44

Tetiana
Зарегистрирован: 2015-12-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа функции с итерацией по списку

Добрый день! Решаю задачку ниже и хочу найти причины трейсбека Keyerror
Из словаря следующего вида необходимо извлечь друзей друзей юзера

 {'юзер1': [[список_друзей_юзера1], [список_игр_юзера1]], 'юзер2': [[список_друзей_юзера2], [список_игр_юзера2]], ...}


 net = {'Freda': [['Olive', ' John', ' Debra'], ['Starfleet Commander', ' Ninja Hamsters', ' Seahorse Adventures']], 'Ollie': [['Mercedes', ' Freda', ' Bryant'], ['Call of Arms', ' Dwarves and Swords', ' The Movie: The Game']], 'Debra': [['Walter', ' Levi', ' Jennie', ' Robin'], ['Seven Schemers', ' Pirates in Java Island', ' Dwarves and Swords']], 'Mercedes': [['Walter', ' Robin', ' Bryant'], ['The Legend of Corgi', ' Pirates in Java Island', ' Seahorse Adventures']], 'Levi': [['Ollie', ' John', ' Walter'], ['The Legend of Corgi', ' Seven Schemers', ' City Comptroller: The Fiscal Dilemma']], 'Jennie': [['Levi', ' John', ' Freda', ' Robin'], ['Super Mushroom Man', ' Dinosaur Diner', ' Call of Arms']], 'Olive': [['John', ' Ollie'], ['The Legend of Corgi', ' Starfleet Commander']], 'John': [['Bryant', ' Debra', ' Walter'], ['The Movie: The Game', ' The Legend of Corgi', ' Dinosaur Diner']], 'Robin': [['Ollie'], ['Call of Arms', ' Dwarves and Swords']], 'Bryant': [['Olive', ' Ollie', ' Freda', ' Mercedes'], ['City Comptroller: The Fiscal Dilemma', ' Super Mushroom Man']], 'Walter': [['John', ' Levi', ' Bryant'], ['Seahorse Adventures', ' Ninja Hamsters', ' Super Mushroom Man']]}

Моя функция
 def get_secondary_connections(net, user):
    secondary_connections = []
    if user not in net:
        return None
    if len(net[user][0])<1:
        return []
     
    for con in net[user][0]:
        for c in net[con][0]:
            if c not in secondary_connections:
                secondary_connections.append(c)
    return secondary_connections

При
 print(get_secondary_connections(net, 'Bryant'))
вижу такой трейсбек https://python.su/forum/attachment/39e4a139985769e720013b13d50717ac35f3d374/

Буду благодарна за помощь.

Отредактировано Tetiana (Июль 13, 2019 17:40:18)

Прикреплённый файлы:
attachment Screenshot_1.png (13,6 KБ)

Офлайн

#2 Июль 13, 2019 18:04:51

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Работа функции с итерацией по списку

Обратите внимание, что у вас часть строк начинается на не нужный пробел, например:

 net = {'Freda': [['Olive', ' John', ' Debra'], ['Starfleet Commander', ' Ninja Hamsters', ' Seahorse Adventures']], 'Ollie': [['Mercedes', ' Freda', ' Bryant'], ['Call of Arms', ' Dwarves and Swords', ' The Movie: The Game']], 'Debra': [['Walter', ' Levi', ' Jennie', ' Robin'], ['Seven Schemers', ' Pirates in Java Island', ' Dwarves and Swords']], 'Mercedes': [['Walter', ' Robin', ' Bryant'], ['The Legend of Corgi', ' Pirates in Java Island', ' Seahorse Adventures']], 'Levi': [['Ollie', ' John', ' Walter'], ['The Legend of Corgi', ' Seven Schemers', ' City Comptroller: The Fiscal Dilemma']], 'Jennie': [['Levi', ' John', ' Freda', ' Robin'], ['Super Mushroom Man', ' Dinosaur Diner', ' Call of Arms']], 'Olive': [['John', ' Ollie'], ['The Legend of Corgi', ' Starfleet Commander']], 'John': [['Bryant', ' Debra', ' Walter'], ['The Movie: The Game', ' The Legend of Corgi', ' Dinosaur Diner']], 'Robin': [['Ollie'], ['Call of Arms', ' Dwarves and Swords']], 'Bryant': [['Olive', ' Ollie', ' Freda', ' Mercedes'], ['City Comptroller: The Fiscal Dilemma', ' Super Mushroom Man']], 'Walter': [['John', ' Levi', ' Bryant'], ['Seahorse Adventures', ' Ninja Hamsters', ' Super Mushroom Man']]}

' John' и ‘John’, ‘ Ollie’ и ‘Ollie’ и т.д.

Офлайн

#3 Июль 13, 2019 20:16:32

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Работа функции с итерацией по списку

 >>> user = "Freda"
>>> reduce(lambda x,y: x+y, ( tuple(net[x.strip()][0]) for x in ( x  for x in net[user][0] )))
('John', ' Ollie', 'Bryant', ' Debra', ' Walter', 'Walter', ' Levi', ' Jennie', ' Robin')



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Июль 13, 2019 20:23:41

Tetiana
Зарегистрирован: 2015-12-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа функции с итерацией по списку

Громаднейшее спасибо, rami и Rodegast!
С функцией было все в порядке, а вот прокравшиеся пробелы мешали

Отредактировано Tetiana (Июль 14, 2019 12:08:49)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version