为什么我得到一个None值,为什么这个数字仍然用Python打印?
可能重复:为什么我得到一个None值,为什么这个数字仍然用Python打印?,python,list,dictionary,set,Python,List,Dictionary,Set,可能重复: 试图在假装的twitter提要程序中打印共同用户。作业数字是用户(例如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
试图在假装的twitter提要程序中打印共同用户。作业数字是用户(例如
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
而是有这样的输出:
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)
请帮助我理解这个问题
findmutual
不返回任何内容,这在Python中相当于返回None
。因此,输出中出现“None”,因为您告诉它打印findmutual(item,all_users)
的返回值,该值始终为None
这些数字仍在打印,因为
findmutual
本身会打印它们。这很少是您想要的,因为它使您无法灵活地调用findmutual
来查找用户ID并对其执行任何其他操作;每次调用它时,它都会打印它们(即使您不想打印),并且您无法访问Python中的数字进行进一步操作。findmutual
不会返回任何内容,这在Python中相当于返回None
。因此,输出中出现“None”,因为您告诉它打印findmutual(item,all_users)
的返回值,该值始终为None
for item in users:
print item, ":\t", findmutual(item, all_users) # << That's why it shows None
这些数字仍在打印,因为findmutual
本身会打印它们。这很少是您想要的,因为它使您无法灵活地调用findmutual
来查找用户ID并对其执行任何其他操作;每次调用它时,它都会打印它们(即使您不想打印),并且您无法访问Python中的数字来进一步操作
for item in users:
print item, ":\t", findmutual(item, all_users) # << That's why it shows None
更新:
如果我没弄错的话,你是想根据谁最受欢迎来建立一个排名
在这种情况下,您可以查看以下解决方案:
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)]
更新:
如果我没弄错的话,你是想根据谁最受欢迎来建立一个排名
在这种情况下,您可以查看以下解决方案:
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)]
在函数中打印内容与返回值不同。因为您在
findmutual
中没有任何return
语句,所以它返回None
@Marius,对不起,我将重新措辞-如果twitter用户名或id等于它测试的共同朋友,我不希望它打印该用户id(因为它不是共同的朋友,而是它本身)它仍然打印id,因为您有一个打印语句。它打印id,然后返回None,调用函数会打印该id。一般来说,函数接受输入并返回输出。不要在函数中添加诸如打印语句之类的副作用。让调用者(用户界面)打印它得到的结果。@pearbear:这是一种不同的语言(PHP而不是Python),但我认为它很好地解释了这里发生的事情。在函数中打印内容与返回值不同。因为您在findmutual
中没有任何return
语句,所以它返回None
@Marius,对不起,我将重新措辞-如果twitter用户名或id等于它测试的共同朋友,我不希望它打印该用户id(因为它不是共同的朋友,而是它本身)它仍然打印id,因为您有一个打印语句。它打印id,然后返回None,调用函数会打印该id。一般来说,函数接受输入并返回输出。不要在函数中添加诸如打印语句之类的副作用。让调用者(用户界面)打印它得到的结果。@pearbear:这是一种不同的语言(PHP而不是Python),但我认为它在解释这里发生了什么方面做得很好。我修复了没有-但我确实希望它打印出来。我现在正试图弄明白,为什么id在通过findmutual
@pearbear时会再次打印,因为你在findmutual
打印东西。您还可以打印findmutual
的返回值。如果你不想打印这些东西中的一个,就不要打印。我修复了一个也没有的,但我确实想打印。我现在正试图弄明白,为什么id在通过findmutual
@pearbear时会再次打印,因为你在findmutual
打印东西。您还可以打印findmutual
的返回值。如果你不想打印这些东西中的一个,就不要打印。我修复了一个也没有的,但我确实想打印。我现在想弄明白为什么id在通过findmutuali时会再次打印我必须承认我不理解你的代码。你想完成什么?啊,没关系,我已经修好了。我为任何混乱道歉。请不要犹豫询问和/或澄清您的意图!;-)我修复了无-但我真的希望它打印。我现在想弄明白为什么id在通过findmutuali时会再次打印我必须承认我不理解你的代码。你想完成什么?啊,没关系,我已经修好了。我为任何混乱道歉。请不要犹豫询问和/或澄清您的意图!;-)