为什么我得到一个None值,为什么这个数字还在Python中打印?

2024-04-20 13:04:57 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Function printing correct Output and None

试图在一个假装的twitter feed程序中打印共同用户。作业。数字是用户(例如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)

请帮助我理解这个问题!你知道吗


Tags: key用户in程序noneidmostfor
2条回答

findmutual不返回任何内容,这在Python中相当于返回None。所以在输出中出现“None”是因为您告诉它打印findmutual(item, all_users)的返回值,它总是None。你知道吗

数字仍在打印,因为findmutual本身打印它们。这很少是您想要的,因为它使您无法灵活地调用findmutual来查找用户id并对其执行任何其他操作;每次调用它时,它都会打印它们(即使您不希望这样做),并且您无法访问Python中的数字来进一步操作。你知道吗

for item in users:
    print item, ":\t", findmutual(item, all_users) # << That's why it shows None

这里发生了什么?你知道吗

  1. item=用户[n]
  2. 打印:
    1. 项目
    2. 输入函数
    3. 函数会再打印一些
    4. 函数结束并(自动)返回None
    5. 打印函数的返回值(无)!你知道吗

你可能想改变步骤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)]

相关问题 更多 >