如何从字典中随机提取具有指定值的键?
解决方法:按指定分值随机获取单词
你的需求很清晰,咱们可以通过先分组再随机选择的方式来实现,步骤简单又高效:
第一步:重构字典(按分值分组)
首先把原有的wordList转换成「分值对应单词列表」的结构,这样后续查找指定分值的单词时不用每次都遍历整个字典,效率更高。
方法一:用collections.defaultdict(推荐)
这个方法更简洁,不用手动处理键不存在的情况:
import random from collections import defaultdict # 你的原始单词字典 wordList = {"to":1,"as":1,"be":1,"see":2,"bed":2,"owl":2,"era":2,"alive":3,"debt":3,"price":4,"stain":4} # 重构为「分值: 单词列表」的映射 score_grouped_words = defaultdict(list) for word, score in wordList.items(): score_grouped_words[score].append(word)
方法二:用普通字典(无需额外导入)
如果不想用collections模块,用普通字典也能实现:
import random wordList = {"to":1,"as":1,"be":1,"see":2,"bed":2,"owl":2,"era":2,"alive":3,"debt":3,"price":4,"stain":4} score_grouped_words = {} for word, score in wordList.items(): # 如果当前分值不在字典里,先初始化一个空列表 if score not in score_grouped_words: score_grouped_words[score] = [] score_grouped_words[score].append(word)
第二步:写函数获取随机单词
接下来封装一个函数,传入目标分值,就能返回该分值下的随机单词,同时处理分值不存在的情况:
def get_random_word(score): # 获取对应分值的单词列表 words = score_grouped_words.get(score) # 如果没有找到对应分值的单词,返回提示字符串(也可以返回None) if not words: return "No words found with this score." # 从列表里随机选一个单词 return random.choice(words)
测试用法
比如你要找分值为3的随机单词,直接调用函数即可:
# 示例调用 random_word = get_random_word(3) print(random_word) # 会随机输出 "alive" 或 "debt"
如果你调用不存在的分值(比如5),函数会返回我们设置的提示:
print(get_random_word(5)) # 输出 "No words found with this score."
这样整个流程就搞定啦,逻辑清晰而且复用性很强~
内容的提问来源于stack exchange,提问作者taxEvader
相关产品推荐
相关产品推荐

