1

可能重复:
功能打印正确的输出和无

试图在假装的 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

这是我的程序:

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)

请帮助我理解这个问题!

4

2 回答 2

1

findmutual不返回任何东西,这在 Python 中相当于返回None. 所以“无”出现在输出中,因为您告诉它打印 的返回值findmutual(item, all_users),它始终是None

这些数字仍在打印,因为findmutual 它自己会打印它们。这很少是您想要的,因为它剥夺了您调用findmutual以查找用户 ID 并对其进行任何其他操作的灵活性;每次你调用它时,它都会打印它们(即使你不想要它),并且你无法访问 Python 中的数字来进一步操作。

于 2012-11-08T03:24:24.987 回答
0
for item in users:
    print item, ":\t", findmutual(item, all_users) # << That's why it shows None

这里发生了什么?

  1. 项目 = 用户 [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)]
于 2012-11-08T03:26:49.540 回答