如何随机播放词典列表?

时间:2015-02-06 19:17:27

标签: python list dictionary

快速提问,我试图使用字典列表在一个简单的测验程序中显示随机问题。我找到了一种方法来做到这一点,但是它已经相当抽出而且有错误,所以我决定在开始时将它们拖拽一次后,更容易迭代这些问题。

我偶然发现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

有谁知道我做错了什么,可以给我一个指向正确的方向吗?

3 个答案:

答案 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,它不会崩溃!