如何在Python中按指定规则打印用户统计结果表格
搞定按指定格式输出用户计数的问题
我来帮你解决这个输出格式的问题!先理清楚你的核心需求:从统计好的用户计数字典里,按计数从高到低排序,相同计数的用户要按字母升序排列;输入一个数字N后,要输出前N个不同计数等级的内容,格式是「计数 用户名1 用户名2 ...」依次用空格拼接。
先说说你现有代码的小问题
- 输入的
x是字符串类型,直接用来切片popular_users[:x]会报错,得转成整数int(x) - 你对用户的排序只考虑了计数降序,没处理相同计数用户的字母升序
- 最后只打印了原始字典,完全没按要求的格式处理输出内容
完整的解决方案代码
# 获取输入并转为整数,避免类型错误 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
相关产品推荐
相关产品推荐

