我正在尝试返回(str, int)
元组的列表,这是元组列表中给定人员的朋友推荐,其中每个元组的第一个元素是潜在朋友的名字(在与字典键相同的格式),第二个元素是潜在朋友的分数。只有具有非零分数的潜在朋友才能被列入名单。
以下是此函数返回值格式的示例:
[('Gloria Pritchett', 2),
('Manny Delgado', 1),
('Cameron Tucker', 1),
('Luke Dunphy', 3)]
对于每个人,社交网络中他们目前不是朋友的所有人都是潜在的朋友。对于特定的人,每个潜在的朋友使用以下积分系统进行评分: 对于此人和潜在朋友所拥有的每个共同朋友,将1点添加到潜在朋友的分数中 对于此人和潜在朋友都属于的每个网络,将1点添加到潜在朋友的分数中 如果此人的姓氏与潜在朋友的姓氏相同,请将潜在朋友的分数加1分,但前提是他们有其他共同点(共同的朋友,共同的网络或两者) 。 这就是我所做的:
这些是我的两个功能正常: 第一个函数返回键的字典:名称值:朋友'名 第二个函数返回键的字典:名称值:网络
我收到了def make_recommendations
的错误消息。我不知道有什么问题..请帮帮我。
答案 0 :(得分:1)
我不确定这是否正在按照你的想法行事:
for key in person_to_friends or person_to_networks:
通过尝试,你可以看到它真正做的事情:
for x in [1,2,3] or [4,5,6]:
print x
这实际上是在说:
for value in (first list if it's not empty otherwise second list)
如果要使用两个列表中的值,则应使用itertools.chain
:
import itertools
for x in itertools.chain([1,2,3], [4,5,6]):
print x
您在以下情况下犯了类似错误:
if freind in person_to_friends[profiles_file] or person_to_networks[profiles_file]:
(请注意freind
中的拼写错误。这可能是您的错误。此函数中的profiles_file
未定义,是否在全局范围内?)你可能意味着:
if friend in person_to_friends[profiles_file] or friend in person_to_networks[profiles_file]:
这由Python评估为:
if (value in first sequence) OR (second sequence is not empty)
另外值得注意的是,在person_to_friends
中,你有:
name.update({lst[0]:lst[1:]})
虽然这在技术上是正确的,但它比传统的更多开销(在理解和处理方面):
name[lst[0]] = lst[1:]
答案 1 :(得分:0)
我发现问题有点复杂并且包含许多交叉点,我建议您简化解决方案并将其划分为步骤:
例如:
找到人的朋友score
的功能(返回元组列表):
def friendsMu(person):
result = []
friends = person_to_friends[person]
for key in person_to_friends:
if key != person:
friends2 = person_to_friends[key]
intersect = list(set(friends) & set(friends2))
p = len(intersect)
if p != 0:
t = (key, p)
result.append(t)
return result
查找人员网络score
的功能(返回元组列表):
def networkMu(person):
result = []
friends = person_to_networks[person]
for key in person_to_networks:
if key != person:
friends2 = person_to_networks[key]
intersect = list(set(friends) & set(friends2))
p = len(intersect)
if p != 0:
t = (key, p)
result.append(t)
return result
用于计算all persons
之前函数的结果的函数(返回字典:key
= name
,value
= list of tuples
):
def allf();
ddict = {}
for key in person_to_friends:
d1 = friendsMu(key)
if d1 != ():
ddict[key] = d1
return ddict
def alln():
ndict = {}
for key in person_to_networks:
d1 = networkMu(key)
if d1 != ():
ndict[key] = d1
return ndict
对merge
最终结果的作用:
from collections import Counter
def mrg(ddict, ndict):
merged = Counter(ddict)
merged.update(ndict)
return merged
输出如下:
print allf()
allf() = {'Jay Pritchett': [('Manny Delgado', 1), ('Cameron Tucker', 1), ('Gloria Pritchett', 1), ('Luke Dunphy', 1)], 'Claire Dunphy': [('Gloria Pritchett', 1), ('Luke Dunphy', 1)], 'Manny Delgado': [('Jay Pritchett', 1), ('Mitchell Pritchett', 1), ('Alex Dunphy', 1), ('Cameron Tucker', 1)], 'Mitchell Pritchett': [('Manny Delgado', 1), ('Phil Dunphy', 1), ('Alex Dunphy', 1)], 'Alex Dunphy': [('Manny Delgado', 1), ('Mitchell Pritchett', 1)], 'Cameron Tucker': [('Jay Pritchett', 1), ('Manny Delgado', 1), ('Luke Dunphy', 1)], 'Haley Gwendolyn Dunphy': [], 'Phil Dunphy': [('Mitchell Pritchett', 1)], 'Dylan D-Money': [], 'Gloria Pritchett': [('Jay Pritchett', 1), ('Claire Dunphy', 1), ('Luke Dunphy', 1)], 'Luke Dunphy': [('Jay Pritchett', 1), ('Claire Dunphy', 1), ('Cameron Tucker', 1), ('Gloria Pritchett', 1)]}
print alln()
alln() = {'Phil Dunphy': [], 'Claire Dunphy': [('Gloria Pritchett', 1)], 'Manny Delgado': [('Alex Dunphy', 1)], 'Mitchell Pritchett': [], 'Alex Dunphy': [('Manny Delgado', 1)], 'Cameron Tucker': [], 'Gloria Pritchett': [('Claire Dunphy', 1)]}
merged = mrg(allf(),alln())
for i in merged:
print i, merged[i]
merged =
Jay Pritchett [('Manny Delgado', 1), ('Cameron Tucker', 1), ('Gloria Pritchett', 1), ('Luke Dunphy', 1)]
Claire Dunphy [('Gloria Pritchett', 1), ('Luke Dunphy', 1), ('Gloria Pritchett', 1)]
Manny Delgado [('Jay Pritchett', 1), ('Mitchell Pritchett', 1), ('Alex Dunphy', 1), ('Cameron Tucker', 1), ('Alex Dunphy', 1)]
Mitchell Pritchett [('Manny Delgado', 1), ('Phil Dunphy', 1), ('Alex Dunphy', 1)]
Alex Dunphy [('Manny Delgado', 1), ('Mitchell Pritchett', 1), ('Manny Delgado', 1)]
Cameron Tucker [('Jay Pritchett', 1), ('Manny Delgado', 1), ('Luke Dunphy', 1)]
Haley Gwendolyn Dunphy []
Phil Dunphy [('Mitchell Pritchett', 1)]
Dylan D-Money []
Gloria Pritchett [('Jay Pritchett', 1), ('Claire Dunphy', 1), ('Luke Dunphy', 1), ('Claire Dunphy', 1)]
Luke Dunphy [('Jay Pritchett', 1), ('Claire Dunphy', 1), ('Cameron Tucker', 1), ('Gloria Pritchett', 1)]
希望这有助于,如果不能准确地告诉你你要求的东西,那就是引导你的东西。 祝你好运。