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