2017-10-06 5 views
1

그래서이 이상한 버그를 발견했습니다.키가 사전에있을 때 KeyError

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

내 코드가 실행되고 나에게이 오류 제공합니다 : 나는 '

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

을이 사전에 액세스하는 코드입니다

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)] 
       } 

: 나는이 키를 포함하는 사전을 만든 여기서 무엇이 잘못 될 수 있는지 확실하지 않습니다 ... 도움에 감사드립니다!

+3

키는 문자열이지만 터플을 사용하려는 것 같습니다. – smarx

+0

'database_5x5 [str (bottom)]'시도 – Umair

+0

딕셔너리를 튜플을 키로 사용하도록 변경하거나 룩업을 수행 할 때 튜플을 문자열로 변환하십시오 (예 :'database_5x5 [str (bottom)]). – smarx

답변

2

사전의 키는 입니다. 당신의 사전 database_5x5

next_moves = database_5x5[str(bottom)] 
+0

아 이런, 내가 잠을 잘 때 일어난 일은 ... 나는이 기본적인 것들을 놓친다 ... 고마워! – Matthew

1

모든 키 문자열입니다,하지만 당신은 튜플bottom 인 요소를 요청 : 당신은 bottom 캐스팅해야합니다. 예를 들어 다음과 같이 키 유형을 변환 해보십시오.

next_moves = database_5x5[str(bottom)] 
0

dict의 키는 유형 문자열입니다. 그래서 두 가지를 확실히해야합니다.

1)이 세그먼트 tuple(puzzle[len(puzzle)-1])은 문자열을 생성합니다.
2) (바보 같은 하나) 공백과 쉼표가 정확히 일치합니다.

수정 :
1) 키가 문자열이 아닌 것으로 변경하십시오.
2) 문자열에 을 입력하십시오.