如何按指定概率从字典中随机选取单词?解决TypeError: 'dict_keys' object is not subscriptable问题
解决按权重随机选取字典键的问题
我来帮你搞定这个问题!你碰到的报错,是因为dict.keys()返回的是一个视图对象(dict_keys类型),它不是可直接下标访问的序列,而random.choices在处理时需要能支持序列操作的对象。下面是两种实用的实现方案:
方案一:直接转换字典键为列表
把dict.keys()转换成列表,就能让random.choices正常工作了。另外要注意,random.choices返回的是一个列表,得取出第一个元素才能得到单个单词:
import random dic = {'A': 0.2, 'B': 0.45, 'C': 0.35} # 将字典键转为列表,传入random.choices next_word = random.choices(list(dic.keys()), weights=dic.values(), k=1)[0] print(next_word)
方案二:更简洁的写法
因为直接迭代字典时默认会遍历键,所以可以简化成list(dic),效果和list(dic.keys())完全一致:
import random dic = {'A': 0.2, 'B': 0.45, 'C': 0.35} next_word = random.choices(list(dic), weights=dic.values(), k=1)[0] print(next_word)
关键细节说明:
random.choices的weights参数支持直接传入对应权重值,不需要提前归一化(你的权重总和已经是1,完全符合要求)。- 必须加
[0],因为random.choices返回的是长度为k的列表(这里k=1,所以列表只有一个元素),取第一个元素才能得到你要的单个单词。 - 如果你用的是Python 3.6+版本,
dict_keys已经支持更多序列操作,但转换为列表的写法兼容性更好,能适配所有Python 3版本。
内容的提问来源于stack exchange,提问作者amnesic
相关产品推荐
相关产品推荐

