2013-11-08 8 views
0

Представьте себе сайт социальной сети, который позволяет людям указывать, какие другие люди им нравятся.Преобразование списка кортежей в python в словарь

Мы можем хранить информацию о том, кто любит, кто в список кортежей, например, один из назначенных

friendface below: 
    friendface = [ 
    (’Zeus’,’Apollo’), 
    (’Zeus’,’Aphrodite’), 
    (’Apollo’,’Aphrodite’), 
    (’Athena’,’Hera’), 
    (’Hera’,’Aphrodite’), 
    (’Aphrodite’,’Apollo’), 
    (’Aphrodite’,’Zeus’), 
    (’Athena’,’Aphrodite’), 
    (’Aphrodite’,’Athena’), 
    (’Zeus’,’Athena’), 
    (’Zeus’,’Hera’), 

Написать функцию Python likes_relation (сеть), которая принимает список кортежей как аргумента (в формате, описанном выше) и возвращает словарь в качестве результата. В выходном словаре есть строки для ключей (представляющие имена людей) и списки строк для значений (представляющих списки имен людей).

Каждый человек в словаре связан со списком всех и только теми людьми, которые им нравятся. Например, функция должна вести себя как и при применении к списку friendface:

likes_relation(friendface) 
    { 'Aphrodite': ['Apollo', 'Zeus', 'Athena'], 
    'Hera': ['Aphrodite'], 
    'Zeus': ['Apollo', 'Aphrodite', 'Athena', 'Hera'], 
    'Apollo': ['Aphrodite'], 
    'Athena': ['Hera', 'Aphrodite'] } 

К сожалению, должен добавить его из списка примеров экзаменационных вопросов, но нет ответов не даны. я добрался до: четкости likes_relations (сеть):
любит = {} для K, V в сети:

после чем я немного потерял, как его не так, как любой из примеров, которые мы сделали в класс

+0

Hi @ user2851268 Вы пробовали что-нибудь, что не произносило ни слова? – Jblasco

+5

действительно не в настроении реализовать всю вашу привязанность прямо сейчас. Не могли бы вы хотя бы показать нам, что вы пробовали, и были ли вы застряли? – Grimmy

ответ

1

Используйте либо defaultdict(list), либо dict.setdefault(..., []) - нет никакой разницы в производительности или удобочитаемости, так что это действительно вопрос вкуса. Я предпочитаю использовать setdefault:

likes = {} 
for k, v in friendface: 
    likes.setdefault(k, []).append(v) 
0

Вот решение с использованием defaultdict:

def likes_relation(friendface): 
    d = defaultdict(list) 
    for k, v in friendface: 
     d[k].append(v) 
    return d 

Результат:

>>> for k,v in likes_relation(f).items(): 
    print (k, v) 


Hera ['Aphrodite'] 
Apollo ['Aphrodite'] 
Aphrodite ['Apollo', 'Zeus', 'Athena'] 
Zeus ['Apollo', 'Aphrodite', 'Athena', 'Hera'] 
Athena ['Hera', 'Aphrodite'] 

Надеется, что это помогает!

+0

Я думаю, вы имеете в виду 'defaultdict (list)' - 'tuple' неизменны. – ecatmur

+0

Да, спасибо, что указали это! – aIKid

Смежные вопросы