You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python按用户分组并统计各用户的粉丝列表?

解决粉丝统计的代码问题

你的代码逻辑完全搞反啦!现在的写法是把每一行里的所有用户都绑定了该行的被关注列表,这和我们需要的**「记录每个用户的粉丝是谁」**的需求正好相反。

问题出在哪?

看你的代码片段:

for aUser in allUsers[0:]:
    aCompleteUserDict[aUser] = allUsers[1:]

比如第一行tony tom frank,你会把tony、tom、frank的value全设为['tom','frank'];后面遇到tom tony jordan时,又会把tom、tony、jordan的value改成['tony','jordan'];最后一行tom frank又会把该行所有用户的value改成['frank']——这就是为什么你的输出完全不符合预期。

正确的代码实现

我们需要的核心逻辑是:每行第一个用户是「粉丝」,后面的是他「关注的人」,要把这个粉丝添加到每个被关注者的粉丝列表里。代码如下:

with open("sample.txt", 'r') as fhand:
    fan_dict = {}
    for line in fhand:
        # 去掉首尾空白后分割,避免空行或多余空格的问题
        parts = line.strip().split()
        if not parts:
            continue  # 跳过空行
        
        fan = parts[0]
        followed_users = parts[1:]
        
        # 遍历每个被关注的用户,把当前粉丝加入他们的粉丝列表
        for user in followed_users:
            if user not in fan_dict:
                fan_dict[user] = []
            fan_dict[user].append(fan)
        
        # 确保粉丝自己也在字典中(如果没人关注他的话)
        if fan not in fan_dict:
            fan_dict[fan] = []

print(fan_dict)

输出结果

运行这段代码后,会得到你期望的结果:

{'tom': ['tony', 'frank'], 'frank': ['tony', 'jordan', 'tom'], 'tony': ['tom', 'frank'], 'jordan': ['tom']}

(注:列表内的顺序是按粉丝出现的先后排列的,和你给出的期望输出顺序略有不同,但内容完全一致,不影响统计分析)

代码解释

  1. 初始化字典:fan_dict用来存储每个用户对应的粉丝列表。
  2. 处理每行数据:用strip()去掉换行符和首尾空格,再用split()分割成用户列表,避免空行或多余空格干扰。
  3. 提取核心角色:parts[0]是当前行为的粉丝,parts[1:]是他关注的所有人。
  4. 更新粉丝列表:对每个被关注者,若还没在字典里就创建空列表,然后把当前粉丝添加进去。
  5. 补全所有用户:确保粉丝自己也在字典中,避免出现某个用户只有关注行为但没被关注时,不在结果里的情况。

内容的提问来源于stack exchange,提问作者Louis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:29:28