如何随机排列字典列表?
How do I shuffle a list of dictionaries?
小问题,我正在尝试使用字典列表在一个简单的测验程序中显示随机问题。我找到了一种方法来做到这一点,但它相当冗长且存在错误,所以我决定在开始时将问题洗牌一次后遍历问题会容易得多。
我偶然发现了 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
有谁知道我做错了什么,可以给我指出正确的方向吗?
您没有字典列表 - 您有一个列表字典。 Python 正在尝试使用标准方法检索列表中的项目,方法是使用括号表示法获取与第一个索引 (0) 对应的项目,但它失败了,因为它不是字典中的键。
作为一个有趣的旁注,如果您将密钥全部设为从 0 到长度为 1 的整数,它就不会崩溃!
我原来的答案是洗牌键,而不是值映射
random.shuffle
与字典不兼容。尝试只打乱键,然后重新索引字典。
newvals = quizBank.values()
random.shuffle(newvals)
randBank = dict((idx, val) for idx, val in enumerate(newvals))
不错。您还可以打乱这些值:
values = quizBank.values()
random.shuffle(values)
我建议不要使用 dict 的原因之一是,一旦你洗牌,你设置的索引也会洗牌。
小问题,我正在尝试使用字典列表在一个简单的测验程序中显示随机问题。我找到了一种方法来做到这一点,但它相当冗长且存在错误,所以我决定在开始时将问题洗牌一次后遍历问题会容易得多。
我偶然发现了 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
有谁知道我做错了什么,可以给我指出正确的方向吗?
您没有字典列表 - 您有一个列表字典。 Python 正在尝试使用标准方法检索列表中的项目,方法是使用括号表示法获取与第一个索引 (0) 对应的项目,但它失败了,因为它不是字典中的键。
作为一个有趣的旁注,如果您将密钥全部设为从 0 到长度为 1 的整数,它就不会崩溃!
我原来的答案是洗牌键,而不是值映射
random.shuffle
与字典不兼容。尝试只打乱键,然后重新索引字典。
newvals = quizBank.values()
random.shuffle(newvals)
randBank = dict((idx, val) for idx, val in enumerate(newvals))
values = quizBank.values()
random.shuffle(values)
我建议不要使用 dict 的原因之一是,一旦你洗牌,你设置的索引也会洗牌。