2017-10-06 5 views
1

私はこの奇妙なバグを見つけました。私は、これらのキーが含まれている辞書を作っ:キーが辞書にあるときのKeyError

database_5x5 = {'(1, 0, 0, 0, 1)': [(0, 0), (0, 1)], 
       '(0, 1, 0, 1, 0)': [(0, 0), (0, 3)], 
       '(1, 1, 1, 0, 0)': [(0, 1)], 
       '(0, 0, 1, 1, 1)': [(0, 3)], 
       '(1, 0, 1, 1, 0)': [(0, 4)], 
       '(0, 1, 1, 0, 1)': [(0, 0)], 
       '(1, 1, 0, 1, 1)': [(0, 2)] 
       } 

これは辞書にアクセスするコードです:

bottom = tuple(puzzle[len(puzzle)-1]) 
    next_moves = database_5x5[bottom] 

私のコードが実行され、私は、このエラーを与える:

KeyError: (0, 1, 1, 0, 1) 

私は」何が間違っているのかわからない... 私は助けに感謝します!辞書に

+3

をキャストしますが、タプルを使用しようとしているようです。 – smarx

+0

[STR(下)] '(' '例えばdatabase_5x5 [STR(下)]) – Umair

+0

をキーとしてタプルを持っている辞書を変更するか、または参照を実行するときに、あなたのタプルは文字列に変換する' database_5x5を試してみてください。 – smarx

答えて

2

キーはタイプstringです。あなたの辞書database_5x5

next_moves = database_5x5[str(bottom)] 
+0

ああ、これは私が睡眠不足の時に起こることです...私はこれらの基本的な事を忘れています...ありがとう! – Matthew

1

すべてのキーは文字列ですが、タプルキーbottomを持つ要素を要求:あなたはbottomをキャストする必要があります。たとえば、次のようにキータイプを変換してみてください。

next_moves = database_5x5[str(bottom)] 
0

dictのキーは文字列です。だから、あなたは2つのことを確認する必要があります。

1)このセグメントtuple(puzzle[len(puzzle)-1])文字列を生成します。
2)(ばか1)スペースとカンマは完全に一致しています。

修正:
1)キーを文字列ではなく変更します。
2)文字列に

関連する問題