我正在尝试从列表中对项目(字典中的一个键)进行采样,然后使用该项目的索引来查找其对应的值(在同一个字典中)。
questions= list(capitals.keys())
answers= list(capitals.values())
for q in range(10):
queswrite = random.sample(questions,1)
number = questions.index(queswrite)
crtans = answers[number]
在这里,大写字母是最初的行为,其中状态(键)和大写字母(值)正在被采样。
但是,显然random.sample()方法将方括号和单引号添加到采样项中,从而防止它被用于引用包含相应值的列表。
追踪(最近一次呼叫最后一次):
文件“F:\ test.py”,第30行,in
number = questions.index(queswrite)
ValueError:['Delaware']不在列表中
我该如何防止这种情况?
答案 0 :(得分:1)
random.sample()
会返回列表,其中包含您请求的元素数量。请参阅documentation:
返回从总体序列或集合中选择的唯一元素的 k 长度列表。用于无需替换的随机抽样。
如果您只想选择一个元素,则不需要样本,但是您只想选择一个。为此,您可以使用random.choice()
function代替:
question = random.choice(questions)
但是,鉴于您使用的是循环,您可能真的想获得 10个独特的问题。不要在range(10)
上使用循环,而是选择10个随机问题的样本。这正是random.sample()
将为您做的事情:
for question in random.sample(questions, 10):
# pick the answer for this question.
接下来,将两个键和值放入两个单独的列表中,然后使用一个索引查找另一个列表...效率低且不必要;您选择的密钥可以直接用 来查找答案:
questions = list(capitals)
for question in random.sample(questions, 10):
crtans = capitals[question]