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

如何在Python中按指定规则打印用户统计结果表格

搞定按指定格式输出用户计数的问题

我来帮你解决这个输出格式的问题!先理清楚你的核心需求:从统计好的用户计数字典里,按计数从高到低排序,相同计数的用户要按字母升序排列;输入一个数字N后,要输出前N个不同计数等级的内容,格式是「计数 用户名1 用户名2 ...」依次用空格拼接。

先说说你现有代码的小问题

  1. 输入的x是字符串类型,直接用来切片popular_users[:x]会报错,得转成整数int(x)
  2. 你对用户的排序只考虑了计数降序,没处理相同计数用户的字母升序
  3. 最后只打印了原始字典,完全没按要求的格式处理输出内容

完整的解决方案代码

# 获取输入并转为整数,避免类型错误
n = int(input("Enter a number: "))

with open('stream.txt','r') as f:
    # 过滤掉带DM和RT的行,提取每行第一个字段作为用户名
    tweetlist = [r.split()[0] for r in f if "DM" not in r and "RT" not in r]

tweet_counter = {}
# 简化计数逻辑,不用写if-else
for tweet in tweetlist:
    tweet_counter[tweet] = tweet_counter.get(tweet, 0) + 1

# 关键排序:先按计数从高到低,相同计数的用户按字母升序排
sorted_users = sorted(tweet_counter.items(), key=lambda item: (-item[1], item[0]))

# 把相同计数的用户归为一组,方便后续按计数等级输出
count_groups = {}
for user, count in sorted_users:
    if count not in count_groups:
        count_groups[count] = []
    count_groups[count].append(user)

# 整理输出内容:取前n个计数组,按要求格式拼接
output_parts = []
# 按计数从高到低遍历前n个组
for count in sorted(count_groups.keys(), reverse=True)[:n]:
    output_parts.append(str(count))
    output_parts.extend(count_groups[count])

# 最后打印成空格分隔的字符串
print(' '.join(output_parts))

代码细节解释

  • 简化计数:用dict.get()方法可以省去判断用户是否在字典里的if-else,代码更简洁
  • 正确排序:sorted的key用lambda item: (-item[1], item[0]),其中-item[1]让计数高的排前面,item[0]让相同计数的用户按字母升序排列
  • 分组处理:把相同计数的用户放到同一个列表里,这样输出的时候可以直接把计数和对应的用户列表拼在一起
  • 格式拼接:把所有要输出的元素放到一个列表里,最后用' '.join()拼成空格分隔的字符串,完美符合你要的格式

测试效果

用你给的统计字典{'judy': 1, 'dean': 1, 'andrew': 2, 'sam': 4, 'fred': 2}测试:

  • 输入3时,输出:4 sam 2 andrew fred 1 dean judy
  • 输入2时,输出:4 sam 2 andrew fred
    完全匹配你的需求哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:41:31