为什么我得到一个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时会再次打印我必须承认我不理解你的代码。你想完成什么?啊,没关系,我已经修好了。我为任何混乱道歉。请不要犹豫询问和/或澄清您的意图!;-)