在Python中随机化字典时键入错误

在Python中随机化字典时键入错误,python,dictionary,typeerror,Python,Dictionary,Typeerror,我正在制作一个简单的闪存卡程序来建立我的词汇表,因此需要随机设置一个词汇表 我在这个网站上找到了很多有用的答案,很多都是在这个网站之外,我注意到shuffle是一个选项(我知道有random.choice,但我选择了shuffle),但有些东西我没有领会。看起来像这样: import random vocab_dict = {'word1':'def1', 'word2':'def2', 'etc.':'etc.'} vocab_dict_rand

我正在制作一个简单的闪存卡程序来建立我的词汇表,因此需要随机设置一个词汇表 我在这个网站上找到了很多有用的答案,很多都是在这个网站之外,我注意到shuffle是一个选项(我知道有random.choice,但我选择了shuffle),但有些东西我没有领会。看起来像这样:

import random

vocab_dict = {'word1':'def1',
           'word2':'def2',
           'etc.':'etc.'}

vocab_dict_rand = vocab_dict.keys()  
random.shuffle(vocab_rand)           **#<--This is where problem occurs**

for key in vocab_rand:
      print word
      input ""
      print definition
      input ""

input exit

任何帮助都将不胜感激。

在Python3中,
返回一个迭代器,而不是列表。你需要一个列表来洗牌。使用
vocab\u dict\u rand=list(vocab\u dict.keys())
在Python3中,
dict.keys()
返回一个特殊的
dict\u keys
对象,该对象只起到列表的作用——它不是一个真正的列表,因此您不能索引到它中或将它洗牌(它应该只用于迭代)


相反,请使用
vocab\u rand=list(vocab\u dict.keys())

在编辑之前,您已经重写了保存的格式编辑。哇。。。这很有启发性。所以我认为类型错误是字典需要复制成列表形式。这在早期版本中不是一个问题吗?非常感谢。在早期版本中,
dict.keys()
返回了一个列表。然而,它似乎经常用于迭代(对于迭代来说,生成整个列表是低效的)。在Python3中,他们将其更改为生成一个迭代器(实际上是一个支持迭代协议的特殊对象)。这与对其他几个内置函数的更改保持一致,如
range
map
zip
,这些函数都在Python3中返回迭代器,但在Python2中生成列表。非常感谢。非常感谢。