2013-11-10 2 views
0

Если у меня есть список кортежей, вот так.Взять список кортежей в качестве аргумента и вернуть словарь в результате

friendface = [('zeus','apollo'),('zeus','aphrodite'), ('apollo','aphrodite'), ('athena','hera'), ('hera','aphrodite'), ('aphrodite','apollo'), ('aphrodite','zeus'), ('athena','aphrodite'), ('aphrodite','athena'), ('zeus','athena'), ('zeus','hera')

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

>>> likes_relation(friendface) 

{'Aphrodite': ['Apollo', 'Zeus', 'Athena'], 
'Hera': ['Aphrodite'], 
'Zeus': ['Apollo', 'Aphrodite', 'Athena', 'Hera'], 
'Apollo': ['Aphrodite'], 
'Athena': ['Hera', 'Aphrodite'] } 

Если кто-то знает, как это можно сделать, я буду благодарен за помощь, потому что это действительно начинает меня раздражать.

Спасибо!

EDIT: У меня в настоящее время есть ужасный код.

def likes_relation(friendface): 
    dict_friends = dict(friendface) 
    for name in friendface: 
     if name not in dict(friendface):   
      #dict(friendface)[name[:] = name[1] 
    #What i'm trying to do is go and run through the list 
    # again and if one of the sets isn't in the dictionary 
    # then add it.... obviously i don't know how... 

возвращение ДИКТ (friendface)

+0

О не видел, что один DSM, это та же самая долбанные бумага. – user2975439

ответ

1
from collections import defaultdict 
result = defaultdict(list) 
map(lambda entry: result[entry[0]].append(entry[1]), friendface) 
+0

Здесь вам не нужна «карта». –

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