如何对Discord Bot输出的reaction数值进行降序排序?
问题:如何对Discord Bot输出的reaction数量进行降序排序
我用Discord Bot脚本获取频道内带指定reaction的消息,筛选出reaction数量达标的条目后,当前输出如下(每行一个条目):
reaction 2
reaction 1
reaction 1
reaction 2
reaction 3
需要将输出中的数字按从大到小降序排列,得到如下结果:
reaction 3
reaction 2
reaction 2
reaction 1
reaction 1
当前生成输出的代码如下:
async for historical_message in message.channel.history(limit=historyLimit): for reaction in historical_message.reactions: if reaction.emoji == msgSplit[1]: num = reaction.count if num >= int(msgSplit[2]): print(reaction, num)
解决方案
要实现降序排序,不能边遍历边打印,需要先收集所有符合条件的条目,排序后再输出。具体修改如下:
修改后的代码
# 初始化空列表存储符合条件的结果 reaction_results = [] async for historical_message in message.channel.history(limit=historyLimit): for reaction in historical_message.reactions: if reaction.emoji == msgSplit[1]: num = reaction.count if num >= int(msgSplit[2]): # 将条目以(数量, reaction对象)的形式存入列表 reaction_results.append( (num, reaction) ) # 按数量从大到小排序 reaction_results.sort(reverse=True, key=lambda item: item[0]) # 遍历排序后的列表打印结果 for num, reaction in reaction_results: print(reaction, num)
关键说明
- 收集结果:先把所有符合条件的
(num, reaction)元组存入列表,避免边遍历边打印导致顺序无法控制 - 排序逻辑:
sort(reverse=True, key=lambda item: item[0])指定按元组的第一个元素(即reaction数量)降序排列 - 输出结果:遍历排序后的列表,按原格式打印每个条目
内容的提问来源于stack exchange,提问作者user19567178
相关产品推荐
相关产品推荐

