尝试在假装的Twitter Feed程序中打印共享用户。家庭作业。数字是用户(ex 1111
是用户)。字典中的以下设置是一组密钥的朋友。
我想要这个输出:
Most friends in common
1111: 222 33333 5454
222: 1111 33333 5454
33333: 1111 222
5454: 1111 222
但是有这个输出:
Most friends in common
1111 : 222 33333 5454 1111 None
222 : 1111 33333 5454 222 None
33333 : 1111 222 33333 None
5454 : 1111 222 5454 None
这是我的计划:
all_users = {'1111': set(['5454', '222']), '33333': set(['5454']), '5454': set(['1111', '33333', '222']), '222': set(['1111', '5454'])}
def findmutual(id, all_users):
users = []
for key in all_users:
mutual = all_users[id].intersection(all_users[key])
rank = len(mutual)
templist = [rank, key.strip()]
users.append(templist)
users = sorted(users)
print users
for item in users:
if id == item[1]:
print "" ,
if item[0] == 0:
print "",
else:
print item[1],
users = []
for key in all_users:
users.append(key)
users = sorted(users)
print "Most friends in common"
for item in users:
print item, ":\t", findmutual(item, all_users)
请帮我理解这个问题!
答案 0 :(得分:1)
findmutual
不返回任何内容,在Python中等同于返回None
。所以“无”出现在输出中,因为你告诉它打印findmutual(item, all_users)
的返回值,它总是None
。
由于findmutual
本身打印它们,因此仍在打印数字。这很少是你想要的,因为它拒绝你调用findmutual
来查找用户id并对它们做任何其他事情的灵活性;每次调用它都会打印它们(即使你不想要它),并且你无法访问Python中的数字以进一步操作。
答案 1 :(得分:0)
for item in users:
print item, ":\t", findmutual(item, all_users) # << That's why it shows None
这里发生了什么?
您可能想要更改步骤3-4! 而不是所有的印刷语句如:
result=''
...
result += '' #whatever
...
return result
<强>更新强>
如果我找对你,你是想根据谁最受欢迎来建立排名?
在这种情况下,您可以查看解决方案:
all_users = {'1111': set(['5454', '222']),
'33333': set(['5454']),
'5454': set(['1111', '33333', '222']),
'222': set(['1111', '5454'])}
from collections import defaultdict, Counter
def findmutual(user_relation_map):
user_list = set(sorted(user_relation_map.keys()))
user_ranking = defaultdict(int)
for user in user_list:
for friend in user_relation_map[user]:
user_ranking[friend] += 1
return user_ranking
c=Counter(findmutual(all_users))
print("Ranking : {0}".format(c.most_common()))
>>> Ranking : [('5454', 3), ('1111', 2), ('222', 2), ('33333', 1)]