0

想象一个社交网络网站,它允许人们指定他们喜欢的其他人。

我们可以将谁喜欢谁的信息存储在一个元组列表中,例如分配给

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(network),它将一个元组列表作为其参数(采用上述格式)并返回一个字典作为其结果。输出字典有键的字符串(表示人名)和值的字符串列表(表示人名的列表)。

字典中的每个人都与所有且只有他们喜欢的人的列表相关联。例如,该函数在应用于friendface列表时应该像这样:

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

抱歉应该从示例考试问题列表中添加它,但没有给出答案。我得到了: def likes_relations(network):
likes = {} for k, v in network:

之后我有点迷失了,因为它不像我们在课堂上做的任何例子

4

2 回答 2

1

使用defaultdict(list)or dict.setdefault(..., [])- 在性能或可读性方面没有太大差异,所以这真的是一个品味问题。我更喜欢使用setdefault

likes = {}
for k, v in friendface:
    likes.setdefault(k, []).append(v)
于 2013-11-08T08:27:27.553 回答
0

Here is a solution using defaultdict:

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

Result:

>>> 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']

Hope this helps!

于 2013-11-08T08:46:02.780 回答