You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定概率从字典中随机选取单词?解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:17:28