1

私は語彙を増やすために簡単なフラッシュカードプログラムを作っていたので、辞書をランダム化する必要がありました。このサイトで多くの役立つ答えを見つけました。多くはこのサイトから離れていて、シャッフルがオプションであることに気づきました(random.choiceがあったことを知っています。しかし、私はシャッフルで行きました)しかし、私が把握していないことがあります。このように見えます:

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

そのため、プログラムがクラッシュし、random.shuffle(vocab_rand)..でその行を指し示します。

私はこれをシェルで取得します

  File "C:\Python31\lib\random.py", line 270, in shuffle
    x[i], x[j] = x[j], x[i]
TypeError: 'dict_keys' object does not support indexing

どんな助けでもいただければ幸いです。

4

2 に答える 2

2

Python 3では、リストのようにのみ機能dict.keys()する特別なオブジェクトを返しますdict_keys。これは実際のリストではないため、インデックスを作成したり、シャッフルしたりすることはできません(反復にのみ使用する必要があります)。

代わりに、を使用してvocab_rand = list(vocab_dict.keys())ください。

于 2012-09-18T05:38:21.607 に答える
1

Python 3ではkeys、リストではなくイテレータを返します。シャッフルするにはリストが必要です。を使用しvocab_dict_rand = list(vocab_dict.keys())ます。

于 2012-09-18T05:36:38.600 に答える