快速提问,我试图使用字典列表在一个简单的测验程序中显示随机问题。我找到了一种方法来做到这一点,但是它已经相当抽出而且有错误,所以我决定在开始时将它们拖拽一次后,更容易迭代这些问题。
我偶然发现random.shuffle()
似乎正是我想要的东西,然而,我似乎无法让它发挥作用。这是我目前正在尝试的内容:
import random
quizBank = {
1: ["What is 1+1?\nA) 2\nB) 11\nC) 1\nD) None of the above.\n\n",'A'],
2: ["What is 2+2?\nA) 2\nB) 4\nC) 1\nD) None of the above.\n\n",'B'],
3: ["What is 3+3?\nA) 2\nB) 11\nC) 6\nD) None of the above.\n\n",'C'],
4: ["What is 4+4?\nA) 2\nB) 11\nC) 1\nD) None of the above.\n\n",'D'],
5: ["What is 5+5?\nA) 2\nB) 11\nC) 10\nD) None of the above.\n\n",'C'],
6: ["What is 6+6?\nA) 2\nB) 12\nC) 1\nD) None of the above.\n\n",'B'],
}
random.shuffle(quizBank)
print(quizBank)
导致以下错误:
Traceback (most recent call last):
File "C:\Users\MyUserName\Desktop\test.py", line 12, in <module>
random.shuffle(quizBank)
File "C:\Python27\lib\random.py", line 291, in shuffle
x[i], x[j] = x[j], x[i]
KeyError: 0
有谁知道我做错了什么,可以给我一个指向正确的方向吗?
答案 0 :(得分:2)
random.shuffle
与字典不兼容。尝试仅对密钥进行洗牌,然后重新索引字典。
newvals = quizBank.values()
random.shuffle(newvals)
randBank = dict((idx, val) for idx, val in enumerate(newvals))
答案 1 :(得分:2)
The answer I already gave you很好。你也可以洗牌:
values = quizBank.values()
random.shuffle(values)
我建议不使用dict的原因之一是,一旦你洗牌,你设置的索引也会被洗牌。
答案 2 :(得分:0)
您没有词典列表 - 您有列表词典。 Python正在尝试使用标准方法来检索列表中的项目,方法是使用括号表示法来获取与第一个索引(0)对应的项目,但它失败了,因为这不是字典中的键。
作为一个有趣的旁注,如果你使你的键所有整数从0到长度1,它不会崩溃!