ChatGPT(全名:Chat Generative Pre-trained Transformer)近期成为网络讨论的热点话题之一。本题就请你根据某社交网络中发帖的情况,统计每个人帖子中含有 ChatGPT
(不区分大小写)的数量(简称“含茶量”),找出最热衷于讨论这个话题的人,即含茶量排前三的人。
输入格式:
输入在第一行中给出正整数:N(≤104),为参加统计的帖子数量。
随后给出 N 条帖子的信息,每条格式为:第一行给出发帖人 ID,是一个长度不超过 10 位的非空数字串;第二行给出非空的帖子的内容,由不超过 140 个英文字母、数字、空格、标点(只包括 ?
、,
和 .
)组成,以回车结束(回车不算在 140 字内)。
输出格式:
分三行输出含茶量最高的前三个 ID,及其含茶量。有并列时按 ID 的字典序递增输出;如果有含茶量的 ID 不到三个,那么有几个就输出几个,但含茶量为 0 的不要输出。数字间以 1 个空格分隔,行首尾不得有多余空格。
题目保证至少有一个输出。
输入样例:
5
1010
I am not interested in ChatGPT.
233
I am gonna talk about chatgpt, and Chatgpt, and CHATGPT
233
they are all ChatGPT
2
I am gonna talk about chatgpt, and Chatgpt, and CHATGPT
0002
chatgp, hatGPT and Chatppt, are they all ChatGPTs?
输出样例:
233 4
2 3
0002 1
注意: 2
和 0002
是两个不同的 ID。
代码实现:
import re
N = int(input()) # 读取帖子数量
tea_count = {} # 存储每个发帖人的“含茶量”
for _ in range(N):
user_id = input().strip() # 读取发帖人 ID
post_content = input().strip() # 读取帖子内容
# 统计“ChatGPT”(不区分大小写)的出现次数
count = len(re.findall(r'chatgpt', post_content, re.IGNORECASE))
# 更新字典中的“含茶量”
if user_id in tea_count:
tea_count[user_id] += count
else:
tea_count[user_id] = count
# 按“含茶量”降序排序,如果含茶量相同,则按 ID 的字典序升序排序
sorted_users = sorted(tea_count.items(), key=lambda x: (-x[1], x[0]))
# 输出含茶量最高的前三个人的信息
for user_id, count in sorted_users[:3]:
if count > 0: # 只输出含茶量大于 0 的用户
print(f"{user_id} {count}")
相关知识:
1.不区分大小写统计:
导入 Python 的 re
模块,用于处理正则表达式。
re.findall(r'chatgpt', post_content, re.IGNORECASE)
-
-
r'chatgpt'
是一个正则表达式,表示要匹配的字符串是“chatgpt”。 -
post_content
是要搜索的字符串。 -
re.IGNORECASE
是一个标志,表示在匹配时忽略大小写。 -
re.findall
返回一个列表,包含所有匹配到的子串。
-
-
len(...)
计算列表的长度,即“ChatGPT”出现的次数。
2.对字典排序
sorted_users = sorted(tea_count.items(), key=lambda x: (-x[1], x[0]))
tea_count.items():
用于获取键值对
key=lambda x: (-x[1], x[0])
-
lambda x
:一个匿名函数,x
是每个键值对(key, value)
。 -
-x[1]
:表示按“含茶量”(x[1]
)的负值排序,即降序排列。 -
x[0]
:表示按发帖人的 ID(x[0]
)的字典序排序,即升序排列。 -
组合排序:
sorted
函数会先按第一个键(-x[1]
)排序,如果第一个键相同,则按第二个键(x[0]
)排序。
3.字典值的访问
通过键访问值:dict['Name']
通过for循环输出:
for user_id, count in sorted_users[:3]:
if count > 0:
print(f"{user_id} {count}")
4.字典修改
dict['Age'] = 8 # 更新 Age
dict['School'] = "信息" # 添加信息