如何检查随机查询词是否在Python 3.7字典的最后5个值中?
解决Twitter Bot的查询词重复检查问题
嘿,看来你已经搞定了历史查询记录的读取和有序字典构建,接下来的核心就是检查新选的随机查询词是否在最近5个历史词里,直到选出符合要求的词就行,咱们一步一步来:
第一步:提取最近5个历史查询词
因为Python 3.7+的字典是按插入顺序保存的,刚好对应你文本文件里的时间顺序,所以直接取字典值的最后5个即可——哪怕历史记录不足5条,这个切片操作也能安全返回所有已有记录:
# 获取最近5个使用过的查询词 recent_queries = list(d.values())[-5:]
第二步:循环筛选符合要求的随机查询词
假设你有一个包含所有可选查询词的列表(比如all_possible_queries),我们只需要不断随机选词,直到选出不在recent_queries里的词就行:
import random # 替换成你实际的候选查询词列表 all_possible_queries = ["computerscience", "python", "computerprogrammer", "AI", "machinelearning", "neuralnetworks"] selected_query = None # 循环:如果选的词在最近5个里,就重新选 while selected_query is None or selected_query in recent_queries: selected_query = random.choice(all_possible_queries)
第三步:保存新的查询记录
选好符合要求的词后,别忘了把今天的日期和新词追加到文本文件里,同时也可以同步更新字典(方便后续直接使用,不用重新读文件):
from datetime import date # 获取今天的日期,格式和你文件里的一致 today_date = date.today().isoformat() # 追加到文本文件 with open(file_name, "a") as f: f.write(f"{today_date},{selected_query}\n") # 同步更新字典 d[today_date] = selected_query
关键点说明
- 字典的有序性是核心:Python 3.7+默认字典保留插入顺序,所以
list(d.values())的顺序完全对应你文件里的时间先后,最后5个就是最近的5次使用记录。 - 循环逻辑的容错性:哪怕候选词不多,这个循环也会一直随机选择,直到找到符合条件的词(如果所有候选词都在最近5个里,那循环会一直跑,你可以根据情况加个退出条件,比如尝试N次后提示)。
内容的提问来源于stack exchange,提问作者Brandon Jacobson
相关产品推荐
相关产品推荐

