想象一个社交网络网站,它允许人们指定他们喜欢的其他人。
我们可以在元组列表中存储关于谁喜欢谁的信息,例如分配给
的元组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),它将元组列表作为 它的参数(采用上述格式)并返回字典作为结果。 outputdictionary包含键的字符串(表示人的名字)和值的字符串列表(表示人名的列表)。
字典中的每个人都与所有人的列表相关联,并且只与他们喜欢的人相关联。例如,当应用于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 = {}
对于k,v在网络中:
之后我有点失落,因为它不像我们在课堂上做的任何例子
答案 0 :(得分:1)
使用defaultdict(list)
或dict.setdefault(..., [])
- 性能或可读性没有太大差异,所以这真的是品味问题。我更喜欢使用setdefault
:
likes = {}
for k, v in friendface:
likes.setdefault(k, []).append(v)
答案 1 :(得分: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']
希望这有帮助!