统计文件每行用户关注人数并返回最大值的技术实现求助
解决用户关注人数统计问题
你的现有代码只是把文件里所有单词拆分后统计总数减一,完全没有实现「逐行统计每个用户关注人数」的核心逻辑。我们来一步步修改代码,实现你的需求:
需求回顾
- 测试文件
followst.txt内容(按行划分,每行第一个是用户,后续是该用户关注的对象):
andrew fred fred judy andrew fred george judy andrew john george
- 目标:统计每个用户的关注人数,返回关注人数最多的用户(若你给出的示例返回
george judy是需求表述偏差,比如实际要统计被关注次数/粉丝数,我也会在后面补充对应实现)
关注人数统计的正确代码
# 初始化字典,存储每个用户的累计关注人数 follow_counts = {} # 用with语句打开文件,自动处理资源释放 with open('followst.txt', 'r') as fhand: for line in fhand: # 去除每行首尾空白,拆分单词列表 words = line.strip().split() if not words: # 跳过空行 continue # 第一个单词是用户,剩下的数量就是该行的关注人数 user = words[0] current_follow = len(words) - 1 # 更新字典:用户已存在则累加,不存在则初始化 if user in follow_counts: follow_counts[user] += current_follow else: follow_counts[user] = current_follow # 找出最大的关注人数值 max_count = max(follow_counts.values()) if follow_counts else 0 # 筛选出所有达到最大关注数的用户 top_users = [user for user, count in follow_counts.items() if count == max_count] # 用空格连接结果并输出 print(' '.join(top_users))
代码逻辑解释
- 字典存储数据:用
follow_counts字典记录每个用户的总关注人数,键是用户名,值是累计关注数,方便快速查找和更新。 - 逐行处理文件:通过
for line in fhand逐行读取,确保每个用户的关注列表被正确划分,不会混在一起。 - 计算单用户关注数:拆分每行单词后,第一个元素是用户,剩余元素的数量就是该用户当前行的关注人数,累加到总数值里。
- 筛选Top用户:先找到最大的关注人数,再把所有达到这个数值的用户筛选出来,最后用空格连接输出。
针对示例返回的调整(统计粉丝数)
如果你的示例返回george judy是因为实际需求是统计每个用户的被关注次数(粉丝数),可以用这段代码实现:
# 初始化字典存储粉丝数 fan_counts = {} with open('followst.txt', 'r') as fhand: for line in fhand: words = line.strip().split() if len(words) < 2: # 没有关注对象的行直接跳过 continue # 遍历当前用户关注的所有对象,给他们的粉丝数加1 for followed_user in words[1:]: if followed_user in fan_counts: fan_counts[followed_user] += 1 else: fan_counts[followed_user] = 1 # 找出粉丝数最多的用户 max_fans = max(fan_counts.values()) if fan_counts else 0 top_users = [user for user, count in fan_counts.items() if count == max_fans] print(' '.join(top_users))
比如当你的followst.txt内容为:
andrew fred fred judy andrew george judy george george judy
运行这段代码就会返回george judy,因为两人的粉丝数均为2,是最多的。
内容的提问来源于stack exchange,提问作者Soshi
相关产品推荐
相关产品推荐

